2012-07-11 125 views
1

我想通過LoadLibrary加載C#DLL。我可以成功加載它。你能告訴我如何使用GetProcAddress這個dll,這樣我就可以使用在這個dll中定義的metods和類型。GetProcAddress託管的C#DLL

先謝謝了!

回答

1

編輯

1 - 最適合這個問題的方法是COM。您應該將AssemblyInfo設置爲COM(ComVisible(true))。看到這個微軟:

2 - 如果你有Windows Vista或更高,這有BitLocker的,BitLocker可能是有用的。

3 - 但如果你不能使用COM,看看這個在代碼項目:

+0

我更新了我的答案。結帳吧! – Ria 2012-07-11 06:01:30

+0

他正試圖調用* managed *代碼,而不是非託管代碼。 – 2012-07-11 06:02:08

+0

你是否簽出我的新答案? – Ria 2012-07-11 06:10:35

0

根據此鏈接:

http://social.msdn.microsoft.com/Forums/br/vcmfcatl/thread/cadd6150-de10-47c5-bd5c-a356741c36b3

GetProcAddress的意志因爲它沒有導出,所以對於託管DLL總是返回NULL。

這就是說,有更好的方法來訪問託管代碼從非託管代碼。您應該圍繞非託管程序集創建C++/CLI包裝程序,然後可以從非託管包裝程序函數內導出託管調用。

假設在A一流的管理職能之一是

public static void Foo() {} 

你可能有C++代碼:

DLLEXPORT void FooThunk() { 
    A::Foo(); 
} 

PS:如果有人在舒適與C++/CLI,請編輯我的回答包括這樣一個包裝的更好的例子。