【发布时间】:2014-07-02 10:01:47
【问题描述】:
我有一个 Excel VBA 项目,我试图从 Visual Studio 2013 输出的 C++ DLL 调用函数。我添加了对 DLL 的引用。当我尝试在 VS 调试器中运行它时,它附加到我调用 DLL 函数的 Excel 实例:
Private pw_ As Long
Private Sub class_initialize()
pw_ = ProjectWiseAPI.CreateProjectWise(True)
End Sub
我收到此错误:
Unhandled exception at 0x0EBE8536 (libProjectWise.dll) in EXCEL.EXE:
OxC0000005: Access violation writing location 0xFFFFFFFF.
这个函数中断了:
PWAPI CreateProjectWise(LPVOID *obj, VARIANT_BOOL showErrors) {
*obj = new XYZ_ProjectWise::ProjectWise(showErrors != FALSE);
return S_OK;
}
特别是在*obj 分配行上。
另外,当我只使用 Excel 文件本身而不是 VS 时,当我编译 VBA 项目时,我收到此错误:
File not found: T:\location\of\dll\libProjectWise.dll
即使我已将 DLL、EXP、ILK、LIB、MAP 和 PDB 文件复制到 T:\location\of\dll 文件夹,并且我的 ODL 文件包含以下行:
[
dllname("T:\location\of\dll\libProjectWise.dll")
]
我对这一切感到很困惑。这个 API 不是我写的,对 C++ 以及如何在 Visual Studio 中开发也只是粗略的了解。原始开发者不可用。
编辑:
这是CreateProjectWise函数的ODL代码:
[
helpstring("Gets an instance of the API object"),
entry("_CreateProjectWise@8")
]
HRESULT __stdcall CreateProjectWise([in] VARIANT_BOOL showErrorMessage, [out, retval] long *obj);
【问题讨论】:
-
您需要显示更多 IDL,尤其是
[out, retval]等注释。 -
@BenVoigt,为此函数添加了 ODL。
-
比较 ODL 和函数体时发现任何可疑之处?比如参数名称和类型与返回类型不匹配?
-
ODL 括号中的部分错误,添加了正确的部分
标签: c++ excel vba dll visual-studio-2013