CAD DLL uses Unicode standard to encode characters in text strings. So, if you have used a previous version of DLL, you need to make changes in your project (depending on the IDE and language you are using for applications development).
This tutorial shows what you need to do in order to provide the correct interaction between your application and DLL.
Delphi:
You need to use Embarcadero Delphi 2009/2010/XE/XE2/XE3/XE4/XE5/XE6/XE7/XE8/XE10 in order to provide a complete support for the Unicode characters set in Delphi applications. No changes are required in your project.
C#/Visual Basic .NET:
You need to override the default marshaling for string parameters to unmanaged methods using the LPWStr type . The following sample shows how to implement it:
[C#]
public class DLLWin32Import
{
const string CADImage = "CADImage.dll";
const UnmanagedType sgStrType = UnmanagedType.LPWStr;
[DllImport(CADImage)]
public static extern IntPtr CreateCAD(IntPtr hWindow, [MarshalAs(sgStrType)] string lpFileName);
}
[Visual Basic]
Class CADImageLib
Private Const CADImageLibName As String = "CADImage.dll"
Private Const sgStrType As UnmanagedType = UnmanagedType.LPWStr
<DllImport(CADImageLibName, _
SetLastError:=True, _
CharSet:=CharSet.Ansi, ExactSpelling:=True, _
CallingConvention:=CallingConvention.)> _
Public Shared Function CreateCAD(ByVal hWindow As IntPtr, <MarshalAs(sgStrType)> ByVal lpFileName As String) As IntPtr
End Function
End Class
You also need to use the Marshal.PtrToStringUni method in order to get a managed string from an unmanaged Unicode string (for instance, if you get text data from the DXFDATA structure):
[C#]
DXFData EData = new DXFData();
string name = Marshal.PtrToStringUni(EData.Text);
[Visual Basic]
Dim CADData As Data = New Data
Dim str As String = Marshal.PtrToStringUni(CADData.Text)
C++:
You need to declare pointer to the WCHAR type using typedef keyword and then use this pointer type for string parameters that are passed to the DLL functions. The following sample shows how to implement it:
[C++]
typedef WCHAR *PWCHAR
..
typedef HANDLE (WINAPI *CREATECAD)(HWND, PWCHAR);
typedef int (WINAPI *CADSETSHXOPTIONS)(PWCHAR, PWCHAR, PWCHAR, BOOL, BOOL);
Visual Basic:
If you use Visual Basic, please, refer to the DemoVB project. Check the sgStringToVBString and VBStringTosgString functions (Module1.bas) that implement string conversion.
See Also
64-bit support | CAD DLL structures | CAD DLL Functions
© 2003-2024 CADSoftTools
Go to CAD DLL