2011-08-19 23 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。簡單。