C# 调用非托管dll? 50
有一个DLL中的函数原型是intgetInfo(char*a1,char*a2,WORD*a3,inta4),其中a2,a3能传回值。在C#中用DllImport调用,如...
有一个DLL 中的函数原型是 int getInfo(char * a1,char * a2,WORD * a3,int a4),其中a2,a3能传回值。在C#中用DllImport调用,如何定义函数?关键就是数据类型如何对应?
我这样写,报错“外部组件发生异常”
[DllImport("my.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public extern static int getInfo(string a1, StringBuilder a2, ref ushort a3, int a4);
private void test()
{
string f1= "D:\\25760.jpg";
StringBuilder f2=new StringBuilder (10);
ushort f3 = 0;
int result=getInfo(f1,f2,ref f3,9);
}
///////////////////////////////////////////////////////////////
我找到原因了,CharSet = CharSet.Ansi 就行了,那个DLL用的是多字节字符集。
希望这个帖子,对新手有帮助,呵呵。 展开
我这样写,报错“外部组件发生异常”
[DllImport("my.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public extern static int getInfo(string a1, StringBuilder a2, ref ushort a3, int a4);
private void test()
{
string f1= "D:\\25760.jpg";
StringBuilder f2=new StringBuilder (10);
ushort f3 = 0;
int result=getInfo(f1,f2,ref f3,9);
}
///////////////////////////////////////////////////////////////
我找到原因了,CharSet = CharSet.Ansi 就行了,那个DLL用的是多字节字符集。
希望这个帖子,对新手有帮助,呵呵。 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询