2015-10-08 43 views
0

有一個C-Funktion我用作DLL。該功能通過輸出Testand - 使用C#封裝器使用C DLL的C#DLL的使用

__declspec(dllexport) uint8_t *SomeFunction(uint8_t *a); 

在各自的頭文件中。

的包裝進口函數

[DllImport("SomeCFunction.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "SomeFunction")] 
private static extern IntPtr SomeFunction(Byte[] array1); 

的包裝與它包含的功能

public unsafe Byte[] SomeFunction(Byte[] array1, Byte[] array2) 
{ 
    IntPtr parray2 = CalculateKeyFromSeed(array1); 

} 

現在我執行在TestStand的步驟時,你得到錯誤的調用方法:

調用.NET成員內部發生異常 'SomeFunct離子':System.BadImageFormatException:Es wurde versucht,eine Datei mit einem falschen格式zu載入中。 (Ausnahme馮 HRESULT:0x8007000B)貝 SomeFunctionWrapperNameSpace.WrapperClass.SomeFunction(字節[] ARRAY1)貝 WrapperNameSpace.WrapperClass.SomeFunction(字節[] ARRAY1,字節[]數組2)中 SomeFunctionWrapper.cs:Zeile 33 。貝SomeFunction(字節[]數組1,字節[]數組2)在 SomeFunction.cs:Zeile 39

一些想法,我怎麼弄的TestStand接受這個DLL嗎?

+0

檢查位,是dll 64位?是C#DLL 64位?那麼TestStand過程呢? –

+0

你是對的!我的TestStand版本是64位的。在VS2010中的C-DLL項目的屬性中,配置管理器只允許32位xor 64位。所以我必須改爲64位。另一個問題是,我在TestStand中使用的C#dll沒有設置在「任何CPU」上,但是我的Wrapper C#DLL是。 FAZIT:在「任何CPU」上設置所有C#Dll,在你的TestStand版本上設置C-Dll。 – Christian

+0

那我就把它當成答案! –

回答

0

BadImageFormat通常意味着其中一個部件的位數不匹配。

這些需要匹配,你有3個部分,以檢查

  • 是對C的dll 64位?
  • 是C#的DLL 64位? (AnyCPU應該可以在這裏AFAIK)
  • TestStand進程是64位嗎?