C#调C++写的DLL函数,出现“方法的类型签名与PInvoke不兼容错误”
C++dll函数代码如下:
结构体原形:
typedef struct MY_DATA
{
int DataFlag;
char *DataBuff;
} MY_DATATYPE;
结构体变量声明赋值:
MY_DATATYPE msd;
msd.DataFlag = MY_EMPTY;
msd.DataBuff = (char*)malloc(MYTMPBUFFSIZE*sizeof(char));
ZeroMemory(msd.DataBuff,MYTMPBUFFSIZE*sizeof(char));
导出函数原形:
MY_DATATYPE SendBuffTo()
{
return msd;
}
×××××××××××××××××××××××××××××××××××××××××××××××××××××
C#中结构体定义代码:
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]
public struct MY_DATA
{
public Int32 Flag;
public String buff;
};
相应导出函数的委任声明:
public delegate MY_DATA SendBuffTo();
我只列出了问题代码段,因为C#中loadlibrary,getprocaddress都是好的,直到调GetDelegateForFunctionPointer这报错了;
C#委任代码原形:
public static Delegate GetDelegateFromInt(int address, Type t)
{
if (address == 0)
return null;
else
{
try
{
return Marshal.GetDelegateForFunctionPointer(new IntPtr(address), t);
}
catch (Exception e)
{
Console.WriteLine(e);
return null;
}
}
}
C#中调用此委任函数如下:
SendBuffTo sbt = (SendBuffTo)DllWrap.GetDelegateFromInt(FunSenBuf, typeof(SendBuffTo));
网上说的类型基本都试了,哭啊,都不行,太恶心了,哪位大侠救救我啊。。。