【发布时间】:2012-08-16 07:54:17
【问题描述】:
我有一个程序,我从 COleDispatchDriver 调用 exe。这将 m_lpDispatch 指针设为 NULL。我从主 exe 的 dll 中调用它。我在代码的开头和结尾添加了 CoInitialize(NULL)/CoUninitialize()。但是exe仍然没有出现。
CoInitialize(NULL);
matProp = IMatProp();
matProp.CreateDispatch(_T("MatProp.Document"));
matProp.Initialize();
matProp.ShowApplication( SW_SHOW );
CoUninitialize();
IMatProp 是机器生成的 IDispatch 包装类,它是 ColeDispatchDriver 类的子类。 下面是该类的方法。
long IMatProp::Initialize() {
long result;
InvokeHelper(0x1, DISPATCH_METHOD, VT_I4, (void*)&result, NULL);
return result;
}
long IMatProp::ShowApplication(long show) {
long result;
static BYTE parms[] =
VTS_I4;
InvokeHelper(0x2, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
show);
return result;
}
从 exe 调用时这工作正常,但从 dll 调用时出现此问题。 请帮我。 非常感谢。
【问题讨论】:
-
另外,你为什么不写一个很好的问题而不是发布你的问题 - 我看到this is the beginning。
-
嗨 Roman,我已经编辑了问题以显示代码。很抱歉一次没有提出整个问题。
-
所有引用的方法都返回执行状态,你检查了吗?如果是这样,错误代码是什么。如果
CreateDispatch失败,请使用调试器进入并查看它在内部的确切位置以及HRESULT代码是什么。 -
CreateDispatch 失败,因为 m_lpDispatch 指针为空。我必须使用带有 MatProp.exe /RegServer 的命令提示符手动注册 exe。我在 Windows 7 中工作。你能解释一下有什么问题吗?
-
你不知道为什么这段代码会失败,因为你根本没有做任何错误检查。你需要先解决这个问题。
标签: com mfc automation visual-c++-2008