我有一個問題調用C#應用程序內的c + + dll函數。我打電話給c#裏面的函數就像這樣:在64位.net應用程序通過c + + 64位DLL pInvoke
[DllImport("cryptopp.dll")]
public static extern IntPtr RSAEncryptString(string filename, string seed, string message);
它被導出到C++ dll中,如下所示。
extern "C" __declspec(dllexport) const char* __cdecl RSAEncryptString(const char *pubFilename, const char *seed, const char *message);
我能得到什麼,當我嘗試調用此方法,但是,是一個「外部組件發生異常。」例外,這是不是很具描述性,並且極其無益。
當我在導出查看器中拉出dll時,它顯示了所有其他導出的函數具有完全量化的聲明(IE public:void __cdecl CryptoPP :: X509PublicKey ::`vbase destructor'(void)__ptr64),除我正在調用的函數,它只顯示函數名稱RSAEncryptString。
這是我可以看到的唯一可能的問題,除了可能在c#端錯誤地調用帶有無效聲明的函數。我使用System.Runtime.InteropServices.Marshal錯了嗎?
請幫忙< 3,並提前致謝。
返回char *的C函數非常麻煩。經典的錯誤是返回一個指向局部變量的指針。從C程序調用時有一些工作的可能性,在被調用時爲零。即使它由C代碼正確完成,並且它使用malloc()來分配字符串緩衝區,但仍然存在無法解決的內存泄漏。你需要代碼作者的幫助。 – 2011-01-19 18:01:19