描述:
(1) 用vc6 或 vc.net2003 先建一个动态WIN32动态库项目, 其中导出类
#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
class DLL_API CDll
{
public:
CDll(void);
long SetPort(long lport);
long GetPort(void);
};
//CPP文件内容
CDll::CDll()
{
return;
}
long CDll::SetPort(long lport)
{
return 0;
}
long CDll::GetPort(void)
{
return 0;
}
(2) 生成解决方案, 生成导出文件DLL.lib 和 DLL.DLL
(3) 用vc.net 2003 建一个ATL动态连接库项目ATLActiveX
(4) 在ATLActivex中添加一个类CTestDll
复制前一个项目的文件到此项目(Dll.h, Dll.LIB, dll.DLL)
#include "StdAfx.h"
#include ".\testdll.h"
#include "Dll.h"
CTestDll::CTestDll(void)
{
CDll dll;
dll.SetPort( 1 );
dll.GetPort();
}
CTestDll::~CTestDll(void)
{
}
(5)将DLL.LIB加入ATLActivex(项目属性->连接器->输入->附加信赖项)
(6)生成解决方案
此时报连接错误ATLActivex error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: long __thiscall CDll::SetPortA(long)" (__imp_?SetPortA@CDll@@QAEJJ@Z) ,该符号在函数 "public: __thiscall CTestDll::CTestDll(void)" (??0CTestDll@@QAE@XZ) 中被引用
注:(1)如果ATLActivex是MFC Activex项目, 不会出现些问题
(2)如果ATLActivex是用VC6做, 也不会出问题
(3)如果将SetPort改名为SetPortno也不会出问题
不知你们的VC.net 2003会不会出现上面的问题,
我查了原因, 不知什么原因将此SetPort 和 GDI的SetPort相关, 是不是bug