问题:如何在 Delphi 中导入名为“IOOperation7::SaveAsWavFile”的 DLL 函数?
详情/说明:
我正在尝试编写代码(在 Delphi XE 中,也必须在 D2007 中工作)来导入由第三方 DLL 文件导出的函数。DLL 文档是 C++ 特定的。我对这种事情的经验有限。
一般的方法当然是这样的:
interface
function SaveAsWavFile (Handle: Cardinal; FileName: WideString): HResult; stdcall;
implementation
function SaveAsWavFile; external 'SOMELIBRARY.DLL';
我遇到的情况是DLL中的函数名嵌入了双冒号。使用 DLL Export Viewer (www.nirsoft.net/utils/dll_export_viewer.html),导出的函数名称报告为“IOperation7::SaveAsWavFile”。
Delphi名称指令似乎可能有所帮助,但以下代码导致运行时错误“无法找到过程入口点 IOperation7::SaveAsWavFile...”
function SaveAsWavFile; external 'SOMELIBRARY.DLL' name 'IOperation7::SaveAsWavFile';
变体(单冒号、点)也不起作用。我还尝试了使用 DLL Export Viewer 报告的序号的 Delphi index指令,但无济于事。我没想到它会起作用,因为似乎每个序数都被多个函数使用。这让我产生了下一个怀疑。
我不确定 :: 字符的重要性,但我现在怀疑它们与DLL 中的嵌入类有关。所以,如果我的怀疑是正确的,我上面的问题也许更好地表述为“如何在 DLL 中包含的类中使用 Delphi 函数?”
编辑: 这是来自 .h 文件的实际参考。我意识到它与我上面发布的代码不太匹配 - 我试图让我发布的示例保持简单。
virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE FdSaveAsWavFile(
/* [in] */ ULONG handle,
/* [in] */ BSTR newFileName,
/* [in] */ ULONG newAudioFormat,
/* [in] */ ULONG failIfExists,
/* [in] */ IOLDMFileProgressNotification *progress) = 0;