2011-05-17 62 views
-1

我需要在C#應用程序中使用C++編碼的DLL,在DLL中有一個方法接收在C++中聲明的對象,我不知道如何解析在C#中使用C#編寫的等效對象與DLL的功能有什麼可以幫助我嗎?解析一個C#對象到一個C++對象

+5

我是否可以自己組裝自己的對象,或者您是否願意放縱我們一點點的代碼? - 另外,請處理您的接受評級,然後返回,並接受正確的答案或發佈正確的解決方案並結束問題。 – 2011-05-17 20:14:05

+0

您需要對參數進行編組。如果您發佈了C++方法簽名,那麼幫助定義正確的編組將更加容易。 – esteuart 2011-05-17 20:14:47

+0

你可以發佈你的C++函數是如何聲明的嗎? – yms 2011-05-17 20:15:16

回答

0

如果未管理C++代碼或COM,則需要將System.Runtime.InteropServices命名空間與Platform Invoke一起使用。您將需要在C#應用程序中定義結構,並將您的結構所使用的任何類型的對象傳遞給使用Platform Invoke的方法。爲了告訴你,我需要看到一些頭文件。

這裏有一個例子:

C++頭:

struct MyStruct 
{ 
    int size; 
    char* data; 
} 

bool MethodToInvoke(MyStruct* obj); 

C#聲明:

struct MyStruct 
{ 
    int size; 
    string data; 
} 

[DllImport("YourDllHere.dll")] 
static extern bool MethodToInvoke(ref MyStruct obj); 

當然,它可能變得更加複雜,但這是一般的想法。

當你不得不擔心調用約定和編組數組時,它可能並且可能會變得非常令人討厭。無論世界需要看到你的一些代碼。