2011-08-19 72 views
0

我有一个非托管dll,其中包含从文件中读取数据的函数。我为它写了一个CLI包装器。通过C#调用数据读取方法无法正常工作

为了测试它是否工作,我编写了一个简单的CLI程序,调用wrapper类和数据读取方法。它运行良好。

我在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作为成员并且正确读取.STRUCT1具有int,double和结构指针作为不正确读取的成员。什么可能是错的?

回答

0

解决方法是将Struct Member Alignment propertyC/C++ > Code Generation之下从1byte 1 byte /Zp1更改为Default。简单。