我有一个非托管dll,它包含一个从文件中读取数据的函数。我为它编写了一个CLI包装器。
为了测试它是否正常工作,我写了一个简单的CLI程序来调用包装类和数据读取方法。它运作良好。
我在c#程序中使用了该dll,但数据读取不正确。它读取但读取的数据不正确。
CLI功能:
void FileReader::ReadFile()
{
int ret;
STRUCT head;
STRUCT1 *sqar;
memset ( ( void * )&head, 0, sizeof ( STRUCT) );
sqar = ( STRUCT1 * )NULL;
ret = Read_func( "somefile.someformat", &head, &sqar );
}
CLI EXE:
int main(array<System::String ^> ^args)
{
FileReader reader;
reader.ReadFile();
Console::WriteLine(L"Hello World");
return 0;
}
这很好用。当我调试时,代码会流经并正确读取数据。
C#代码:
{
FileReader filereader= new FileReader ();
filereader.ReadFile();
}
当我在C#项目中导入CLI dll并访问上面的代码时,数据无法正确读取。
STRUCT将int作为成员并且它被正确读取.TRUCT1具有int,double和结构指针作为成员,这些指针无法正确读取。什么可能是错的?
答案 0 :(得分:0)
解决方案是将Struct Member Alignment property
下的C/C++ > Code Generation
从1字节1 byte /Zp1
更改为Default
。简单。