to xixigongzhu(夕夕公主): 按照你的说法我将函数在.NET里声明为: [DllImport("c:\\test\\Img.dll")] public static extern byte[] GetErrMsg(int N,byte[] ErrInfo); 实际调用中: int i=-1080; byte[] errmsg = new Byte[2048]; GetErrorMsg(i,errmsg); 运行后提示:无法封送 return value 不知道该怎么修改? 我已经给你发了邮件,请你查收,谢谢!
我现在将其改为 public static extern byte[] GetErrMsg(int N,out byte[] ErrInfo); 运行后会有同样的提示!!!
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
unsafe public struct IMGBUF
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst=256)]
public byte[] ImgBuf;
}
声明为:
[DllImport("c:\\test\\Sino.dll")]
public static extern int GetImage(int N, [MarshalAs (UnmanagedType.LPStruct)] IMGBUF ImgBuf);
调用时这样用:
IMGBUF imageBuf;
imageBuf.ImgBuf = new byte[256]; //256> 你要的字段
int i = WebForm1.GetImage(0,imageBuf);
运行后总提示:
无法封送 parameter #2:无效的托管/非托管类型组合(该值类型必须与 Struct 成对出现)。
这是怎么回事啊?
char *->StringBuilderlong GetImage(long DeviceNumber, StringBuilder ImgBuf);
StringBuilder GetErrMsg(long ErrorNo, StringBuilder ErrInfo);
按照你的说法我将函数在.NET里声明为:
[DllImport("c:\\test\\Img.dll")]
public static extern byte[] GetErrMsg(int N,byte[] ErrInfo);
实际调用中:
int i=-1080;
byte[] errmsg = new Byte[2048];
GetErrorMsg(i,errmsg);
运行后提示:无法封送 return value
不知道该怎么修改?
我已经给你发了邮件,请你查收,谢谢!
public static extern byte[] GetErrMsg(int N,out byte[] ErrInfo);
运行后会有同样的提示!!!
我自己写了一个程序度了,没问题呀!!
mydll.def
------------------------------------------------------------
LIBRARY MyDllEXPORTS
f @1mydll.cpp
-------------------------------------------------------------char * f(int a, char* b, int* c,unsigned char * s)
{
if(strcmp(b,"123")==0)
{
return(b);
}
else
{
return("2345");
}
}test.cs
----------------------------------------------------
[DllImport("mydll.dll")]
public static extern StringBuilder f(int a,StringBuilder b,ref int c,StringBuilder d);public static void Main()
{
StringBuilder b=new StringBuilder("25235");
int c=0;
Console.WriteLine("{0}",f(10,b,ref c,b));
Console.ReadLine();}
ms-help://MS.NETFrameworkSDKv1.1.CHS/cpguidenf/html/cpconplatforminvokedatatypes.htm
因为我研究得不多,也没写过这样的例子,所以只能找些说明文档,希望对你有用。
如果是别的版本,请截取cpguidenf/html/cpconmarshalingdatawithplatforminvoke.htm。