描述:
现在我手上有个COMDll.dll与COMDll.tlb文件,我通过添加ACTIVE控件的形式将COMDll.tlb添加到工程中,结果出现一个CCOMLink.h和CCOMLink.cpp
下面是CCOMLink.h前面的一段代码:
class CCOMLink : public CWnd
{
protected:
DECLARE_DYNCREATE(CCOMLink)
public:
CLSID const& GetClsid()
{
static CLSID const clsid
= { 0x59BE3F11, 0xF1F, 0x4EC0, { 0xA4, 0xCC, 0x75, 0x57, 0xDC, 0xA5, 0x3B, 0x16 } };
return clsid;
}
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = NULL)
{
return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID);
}
BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd,
UINT nID, CFile* pPersist = NULL, BOOL bStorage = FALSE,
BSTR bstrLicKey = NULL)
{
return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,
pPersist, bStorage, bstrLicKey);
}
// 属性
public:
// 操作
public:
BOOL OpenCOM(long Net, LPSTR COM, long BaudRate)
{
BOOL result;
static BYTE parms[] = VTS_I4 VTS_UNKNOWN VTS_I4 ;
InvokeHelper(0x2, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, Net, COM, BaudRate);
return result;
}
}
我在程序中如此调用函数,结果每次都出断言错误
/*初始化COM组件*/
CoInitialize(NULL);
AfxEnableControlContainer();
CRect rt;
GetClientRect(&rt);
m_pCISComLink = new CCOMLink();
BOOL bCreate = m_pCISComLink->Create("CCOMLink",NULL,WS_CHILD|WS_VISIBLE,rt,this,0,NULL);
BOOL bOpenCom = m_pCISComLink->OpenCOM(0,"COM1",9600);
发现bCreate 返回都是0,不知道那个Create的那个函数的各个参数怎么调用?小弟第一次做这种DLL调用没有经验,请各位大虾帮我看看,如果不是上面那种方式调用,请问我该怎么调用才能正常调用,分不够我可以加,谢谢,十万火急!
解决方案1:
nID参数是0,有没有跟其它子窗口的ID重复?
解决方案2: 改成:
BOOL bCreate = m_pCISComLink-> Create(NULL,"CCOMLink",WS_CHILD |WS_VISIBLE,rt,this,0,NULL);