在VC++中调用Delphi DLL时,如果Delphi方法接受PChar(即char*或const char*)类型的参数,你可以直接传递一个char*类型的指针。Delphi的PChar与C++的char*在内存布局和调用约定上是兼容的。 以下是一个简单的例子: Delphi DLL 方面: - library DelphiDLL;
- uses
- SysUtils;
- procedure ShowMessage(Text: PChar); stdcall;
- begin
- MessageBox(0, Text, 'Delphi', MB_OK);
- end;
- exports
- ShowMessage;
- begin
- end.
复制代码VC++ 调用方面: - #include <Windows.h>
- #include <iostream>
- typedef void (*ShowMessageProc)(const char* Text);
- int main() {
- HINSTANCE hInst = LoadLibrary("DelphiDLL.dll");
- if (hInst) {
- ShowMessageProc ShowMessage = (ShowMessageProc)GetProcAddress(hInst, "ShowMessage");
- if (ShowMessage) {
- const char* message = "Hello from VC++";
- ShowMessage(message);
- } else {
- std::cerr << "Failed to get function address." << std::endl;
- }
- FreeLibrary(hInst);
- } else {
- std::cerr << "Failed to load library." << std::endl;
- }
- return 0;
- }
复制代码在这个例子中,Delphi DLL 提供了一个ShowMessage过程,它接受一个PChar参数。在VC++程序中,我们通过LoadLibrary加载DLL,然后使用GetProcAddress获取函数指针,并将char*类型的变量传递给它。 确保DLL的名称(在LoadLibrary调用中)与实际的DLL文件名匹配,并且DLL已经正确地被安装到了系统上,可能在DLL所在的目录,或者在系统的搜索路径中。
|