C++原函数为int WINAPI DnaSelectPoint(char *pszPoint[], unsigned short nPoint);
VB声明为:Public Declare Function DnaSelectPoint Lib "ezdnaapi.dll" (ByVal Point As String, ByVal LenPoint As Integer) As Integer
C#定义为 :
[DllImport("ezdnaapi.dll", CallingConvention = CallingConvention.Winapi)]
public static extern int DnaSelectPoint(string Point, int LenPoint);
VB代码为:
Dim ret As Integer
'CRUCIAL!!! Must use fixed length strings
Dim strPointName As String * 40
ret = DnaSelectPoint(strPointName, Len(strPointName))
C#代码为:
int ret;
string strPointName = new string('\0', 40);
ret = DnaSelectPoint(strPointName, strPointName.Length);
VB调用之后会修改 strPointName的值,但C#不会,请问该如何修改,不用不安全代码
VB声明为:Public Declare Function DnaSelectPoint Lib "ezdnaapi.dll" (ByVal Point As String, ByVal LenPoint As Integer) As Integer
C#定义为 :
[DllImport("ezdnaapi.dll", CallingConvention = CallingConvention.Winapi)]
public static extern int DnaSelectPoint(string Point, int LenPoint);
VB代码为:
Dim ret As Integer
'CRUCIAL!!! Must use fixed length strings
Dim strPointName As String * 40
ret = DnaSelectPoint(strPointName, Len(strPointName))
C#代码为:
int ret;
string strPointName = new string('\0', 40);
ret = DnaSelectPoint(strPointName, strPointName.Length);
VB调用之后会修改 strPointName的值,但C#不会,请问该如何修改,不用不安全代码
public static extern int DnaSelectPoint(out string Point, int LenPoint);
public static extern int DnaSelectPoint(ref string Point, int LenPoint);
这样都不好使啊!
public static extern int DnaSelectPoint(out string Point, ushort LenPoint);
stringbuild可以修改
public static extern int DnaSelectPoint( System.IntPtr Point, int LenPoint);
call
IntPtr p = Mashal.AllocToGlobalMem( 40 );
DnaSelectPoint( p , 40 );
public static extern int DnaSelectPoint(StringBuilder Point, Int32 LenPoint);