C++ Delphi和C++;,dll导入
我有一个DLL,带有导出函数:C++ Delphi和C++;,dll导入,c++,delphi,dll,C++,Delphi,Dll,我有一个DLL,带有导出函数: int HCalculator::CalculateMC(const char* h, const char* b, const char* d, __int64 numberOfTrials, double* results) 如何在Delphi项目中导入该函数 这似乎是: function CalculateMC(h, b, d: PChar; numberOfTrials: int64; results: ???): integer; stdcall;
int HCalculator::CalculateMC(const char* h, const char* b, const char* d, __int64 numberOfTrials, double* results)
如何在Delphi项目中导入该函数
这似乎是:
function CalculateMC(h, b, d: PChar; numberOfTrials: int64; results: ???): integer; stdcall; external 'MYDLL.DLL';
但是一个double数组呢?怎么写下来?我应该如何调用该函数?参数是一个双精度数组。为了便于论证,假设数组具有
numberOfTrials
元素。然后按如下方式调用DLL:
function CalculateMC(h, b, d: PChar; numberOfTrials: int64;
results: PDouble): integer; stdcall; external 'MYDLL.DLL';
.....
var
returnVal: integer;
results: array of Double;
.....
SetLength(results, numberOfTrials);
returnVal := CalculateMC(h, b, d, numberOfTrials, @results[0]);
< >我看到的一个主要问题是C++函数看起来是一个成员函数。你可以在Delphi中调用一个额外的参数,将其添加到<代码> CalculateMC > />代码之前,所有其他参数都包含指向C++对象实例的指针。但是你需要一种方法来掌握这个实例。显然,您必须在Delphi代码中修改
calculateEMC
的声明。您的DLL可能会导出一个返回新创建实例的函数
另一个可能的问题是,在Delphi导入中,您已经指定了
在Delphi中没有直接等效项。我会在C++代码中添加一个显式的<代码>“ysSTDele>”/>代码。thiscall
stdcall
?而且,用这些信息也说不出如何称呼它。只有你可能知道。例如,double*results
可用于返回单个值或数组。它是哪一个?结果应该是一个双精度数组。“你可以从Delphi中调用它…”我不同意。成员函数使用的thiscall
调用约定在ECX中传递this
指针,它不是stdcall
放置第一个参数的地方。@BenVoigt不要管this
指针,如果不匹配,所有参数都将关闭。我假设C++ DLL编译为使用这个函数的代码> STDCALL> /COD>。显然,呼叫约定具有匹配性。除此之外,无论使用哪种约定,都需要将this
指针作为额外参数提供。不管怎样,我现在已经添加了一段讨论调用约定的内容。另外,休斯顿现在的天气怎么样,我几周后就要来了@本,我已经写了代码来解决这个问题。请参阅我的导入单元,微软忽略了使用STDCULL进行接口。@戴维:微软C++中,非静态成员函数都使用<代码>此调用< /C> >,普通函数使用<代码> CCDL> < /C> >或<代码> STDCALL> /COD>。我认为,无论使用多少关键字,成员函数的调用约定都无法改变。顺便说一句,这里的温度很好,我们有一个阴雨交加的晴天。短裤和t恤衫是明确指定的(适合晴朗的天气,另一方面干燥更快…)如果您使用我的名字作为URL,您应该能够找到我的联系信息。@BenVoigt我不确定这是否正确。阅读此MSDN页面: