【问题标题】:Call Delphi DLL from C++\CLI with many parameters使用许多参数从 C++\CLI 调用 Delphi DLL
【发布时间】:2011-10-17 13:12:35
【问题描述】:

我有 Delphi 2010 用两种方法构建的 DLL:

function Foo1(a, b: Integer):PChar; export; stdcall;
function Foo2(a, b, c:Integer):PChar; export; stdcall;

exports Foo1, Foo2;

他们每个人都返回Result := PChar('Test')

我的 C++\CLI 代码

在标题中

typedef const wchar_t* (*pFUNC1)(int a, int b);
pFUNC1 TestFoo1;

typedef const wchar_t* (*pFUNC2)(int a, int b, int c);
pFUNC2 TestFoo2;

LoadLibraryGetProcAddress 函数初始化。 用法:TestFoo1(0,0)TestFoo2(0,0,0)

两者都在发布模式下工作。
但在调试模式下,Foo2 正在中止。

请指教出了什么问题。

【问题讨论】:

    标签: delphi c++-cli delphi-2010


    【解决方案1】:

    您很可能遇到调用约定不匹配的问题。将 Delphi 中的 stdcall 更改为 cdecl 以匹配您的 C++/CLI 代码。

    顺便说一句,如果您尝试从 DLL 中返回一个不是存储在数据段只读内存中的文字的值,则需要注意字符串的生命周期。但这不是问题所在,因为PChar('Test') 与 DLL 具有相同的生命周期。

    【讨论】:

    • 宾果游戏!有用。我将 StrAlloc、StrPCopy、StrDispose 用于内存使用目的。
    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 2013-06-22
    • 1970-01-01
    相关资源
    最近更新 更多