我有一个问题调用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