组件调用提示E_NOINTERFACE的问题

sszwbuaa 2009-02-18 10:00:15
我刚学COM,遇到个问题,试了几天也没搞明白,希望那位高手指点下,不胜感激!

待使用的组件只提供一个库文件OpenSTAADUI.tlb

在VB中通过下面的调用没有问题。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim objOpenSTAAD As Object

'Get the application object
objOpenSTAAD = GetObject(, "StaadPro.OpenSTAAD")

'Open the file
Dim strFileName As String
strFileName = "C:\\Pro01.std"
objOpenSTAAD.OpenSTAADFile(strFileName)

End Sub

在VC中尝试几种以下几种调用方法都提示E_NOINTERFACE错误,为什么?
#import "C:\\SPro2007\\OpenSTAAD\\OpenSTAADUI.tlb" no_namespace

//。。。。方法1。。。。。。。
CoInitialize(NULL);

IOpenSTAADUIPtr m_ui = NULL;

HRESULT hr = m_ui.GetActiveObject(__uuidof(OpenSTAAD));// hr为E_NOINTERFACE

CoUninitialize();

//。。。。方法2。。。。。。。
CoInitialize(NULL);

CLSID clsid;
CLSIDFromProgID(L"StaadPro.OpenSTAAD", &clsid);

IUnknown *pUnk = NULL;
IDispatch *pDisp = NULL;
IOpenSTAADUI *pOSUI = NULL;

hr = GetActiveObject(clsid, NULL, (IUnknown**)&pUnk);

if(SUCCEEDED(hr))
{
hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pDisp);// hr为S_OK,没问题
}

if(SUCCEEDED(hr))
{
hr = pDisp->QueryInterface(__uuidof(IOpenSTAADUI);,(void **)&pOSUI);hr为E_NOINTERFACE
}
CoUninitialize();

其中导入tlb文件生成的tlh文件关键部分如下所示
struct __declspec(uuid("eda9fa7f-efc9-4264-9513-39cf6e72604d"))
/* LIBID */ __OpenSTAADUI;
enum StrengthType;
struct __declspec(uuid("3f5b8055-31c6-446e-8bed-fee43e09d4cc"))
/* dispinterface */ IOpenSTAADUI;
struct /* coclass */ OpenSTAAD;
struct __declspec(uuid("c052fed9-a2d6-42e3-a271-2c6fb8461711"))
/* dispinterface */ IOSGeometryUI;
struct /* coclass */ OSGeometryUI;

//
// Smart pointer typedef declarations
//

_COM_SMARTPTR_TYPEDEF(IOpenSTAADUI, __uuidof(IOpenSTAADUI));
_COM_SMARTPTR_TYPEDEF(IOSGeometryUI, __uuidof(IOSGeometryUI));



...全文
283 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
iwillbeback008 2009-11-18
  • 打赏
  • 举报
回复
关注,我也遇到这个问题了
lb999255 2009-04-13
  • 打赏
  • 举报
回复
关注,我也遇到这个问题了,

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧