我有一個用RAD Studio(C++ Builder)XE4開發的C++ Windows應用程序。它有一些插件,這些插件是用this technique動態加載的DLL(總是用RAD Studio編寫)。在C++ Builder應用程序中動態加載C#.NET程序集
現在在這個插件中,我需要反射功能。雖然看起來我無法用C++來實現它們(反射需要在我無法修改的第三方COM DLL上),但我決定在C#(它具有強大的反射功能)中重寫這個插件,從而創建了一個.NET程序集。
我知道我應該通過COM公開程序集,但我不能(我們不想改變主應用程序加載所有DLL的方式)。
我的目標是與類似下面的動態加載.NET程序集並調用其功能(比如這裏我們稱之爲SetParam
功能),就像我與其他插件做。
//load DLL
HINSTANCE handleDll = LoadLibraryW("C:/Path/to/the/assembly.dll");
//get reference to the function
void* ptr = GetProcAddress(handleDll, "_SetParam");
ptr_SetParam ptrFunc = reinterpret_cast<ptr_SetParam>(ptr);
//invoke function
int result = (*ptrFunc)(String("mykey").c_str(), String("myvalue").c_str());
其中ptr_SetParam
被定義爲
typedef int(*ptr_SetParam)(const wchar_t*, const wchar_t*);
有沒有辦法?
[有方法](http://stackoverflow.com/questions/17127825/c-sharp-unmanaged-exports)將非託管導出插入C#程序集。吉塞克的工具得到了很多應用。請注意,這幾乎從來不是一個嚴重的錯誤,它規模很小,異常極難診斷。 –