【发布时间】:2013-06-22 15:12:26
【问题描述】:
我有一个 Delphi DLL,当被 delphi 应用程序调用并导出一个声明为的方法时,它可以工作:
Procedure ProduceOutput(request,inputs:widestring; var ResultString:widestring);stdcall;
在 C++ 方面我尝试过:
[DllImport( "ArgumentLab.dll", CallingConvention = CallingConvention.StdCall, CharSet=CharSet.WideString )];
extern void ProduceOutput(WideString request, WideString inputs, WideString ResultString);
WideString arequest = WideString(ComboBox1->Text);
WideString ainput = "<xml> Input Text Goes Here </XML>";
WideString aresultstring;
WideString &aresultstringpointer = aresultstring;
aresultstring = " ";
ProduceOutput(arequest, ainput, &aresultstringpointer);
Memo1->Lines->Text = aresultstring;
我的控制台错误显示:
Unit1.cpp(13): candidate function not viable: no known conversion from 'BSTR *' (aka 'wchar_t **') to 'System::WideString' for 3rd argument;
我已经使用 Rad Studio XE4 构建了 DLL 和 c++ 测试应用程序 - 它是一个 64 位 DLL 和 APP
我应该怎么做呢?
最好的问候,
加里
【问题讨论】:
-
C++Builder 中没有
DllImport。您是否改用 .NET PInvoke? -
Remy,不使用DLLImport如何获取DLL库?顺便说一句,谢谢您的回复。
-
@user2521117 如果您不使用 C++Builder,这可能不起作用,因为 C++ 没有标准的二进制接口。
-
@user2521117:我想说的是,
[DllImport(...)]语法在 C++Builder(或任何其他 C++ 编译器)中不存在。该语法存在于 .NET 中,而不是用于其 PInvoke 功能。要在 C++ 中导入 DLL 函数,您只需像上面所示通常声明该函数,然后静态链接到 DLL 的导入 .lib 文件(您可以使用 C++Builder 的命令行 IMPLIB 工具生成该文件),或者您动态加载在运行时使用 Win32 APILoadLibrary()和GetProcAddress()函数。
标签: c++ delphi c++builder