通过C#调用时,数据读取方法无法正常工作

时间:2011-08-19 04:01:33

标签: c# c++-cli unmanaged

我有一个非托管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和结构指针作为成员,这些指针无法正确读取。什么可能是错的?

1 个答案:

答案 0 :(得分:0)

解决方案是将Struct Member Alignment property下的C/C++ > Code Generation从1字节1 byte /Zp1更改为Default。简单。