解决方案 »
- 求GDI+的马赛克滤镜的教材
- 两个Port Restricted Cone NAT如何穿透?
- 超大图像的分块显示
- SOCKET编程中传输字符的疑问
- 下面这段代码,我想不显示GUI界面,该在哪里改动呢?求求帮我
- 同样内容的unicode格式的文本文件是不是比ansi格式的字节数要大一倍?
- 用1个字符串存储1个DWORD值,字符串最小定义多长?
- 分太多了,整天提心吊胆,生怕csdn上面的强盗给抢了,特来散分,以图晚上睡个安稳觉!!
- 如何从doc类里发自定义消息到view类里?
- 一个没有解决的问题!我已经贴过一次,可每人回答!
- 【VC6.0】头文件引用出错,求助
- 急!!!!关于从文件读入二进制的问题
多谢版主回复啊!
只是有点不明白的是放在一个文件夹是指什么?因为我的test.cpp 和 Interface.cpp都是在同一个项目下的,只生成一个dll文件:test.dll。
多谢版主回复啊!
只是有点不明白的是放在一个文件夹是指什么?因为我的test.cpp 和 Interface.cpp都是在同一个项目下的,只生成一个dll文件:test.dll。
你这种情况下,都不知道Ctest 对象是什么,这两个都是在一个工程里面的吗,还是Ctest 单独放在一个dll中,如果在一个工程中,需要引用test头文件,
HRESULT FinalConstruct()
{
//这里创建Ctest实例
pObject=new Ctext();
return S_OK;
}
在下边释放对象
void FinalRelease()
{
delete pObject;
pObject=NULL;
}
test头文件是引用了的,这里是我完整的Interface.h:
// Interface.h : Declaration of the CInterface
#pragma once
#include "resource.h" // main symbols
#include "test_i.h"
#include "test.h"#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
#error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms."
#endifusing namespace ATL;// CInterface
class ATL_NO_VTABLE CInterface :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CInterface, &CLSID_Interface>,
public IDispatchImpl<IInterface, &IID_IInterface, &LIBID_testLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
STDMETHOD(OLT)();
CInterface() {}
DECLARE_REGISTRY_RESOURCEID(IDR_INTERFACE)
BEGIN_COM_MAP(CInterface)
COM_INTERFACE_ENTRY(IInterface)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT() HRESULT FinalConstruct()
{
pObject = new Ctest();
return S_OK;
} void FinalRelease()
{
delete pObject;
pObject = NULL;
}
private:
Ctest *pObject;
};OBJECT_ENTRY_AUTO(__uuidof(Interface), CInterface)下面是完整的Interface.cpp:
// Interface.cpp : Implementation of CInterface
#include "stdafx.h"
#include "Interface.h"
// CInterface
STDMETHODIMP CInterface::OLT()
{
MessageBox(NULL, _T("Connect!"), _T("Information"), MB_OK);
return pObject->connect() ? S_OK : E_FAIL;
}完整的test.h:
#pragma once
class Ctest
{
public:
virtual int connect();
};test.cpp(DllCanUnloadNow...等函数不贴出来了):
// test.cpp : Implementation of DLL Exports.
#include "stdafx.h"
#include "resource.h"
#include "test_i.h"
#include "dllmain.h"
#include "xdlldata.h"
#include "test.h"
int Ctest::connect()
{
return 0;
}所有的文件都在一个工程里面,最终生成一个test.dll的文件。我在matlab中用一个mex函数来调用这个OLT(),现在不会强制退出了,只是提示:
??? Unexpected unknown exception from MEX file.这个Mex函数已经成功调用了dll中的OLT(),因为MessageBox已经出来了,所以mex函数应该没什么问题,错误应该还是在这个指针上。
调试了一下,发现加入以上语句就可以调用test中的OLT函数,但调用之后提示错误找不到test.tli文件。我尝试加入语句#import "C:\Proj\Debug\test.tlb" 但提示找不到头文件test.tlh,所以matlab还是会自动退出。请问这个.tli文件需要怎么生成?