1> 最简单的 常规dll.
只能导出函数。
导出函数的写法:
在生成的.cpp文件下部,或者另行创建一个.cpp文件。
extern "C" __declspec(dllexport) typeReturn FuncName(typePara )
{
//如果是动态连接,则这个宏必须放在函数的第一行。
//如果是静态链接,此宏可有可无。
AFX_MANAGE_STATE(AfxGetStaticModuleState());
.......
return typeReturnData;
}
隐式链接:需要dll提供 .lib .dll两个文件还有.dll的头文件(用于获取函数名称),在此没有在头文件中声明函数。(或者把 extern "C" __declspec(dllexport) double SqrtTest(double&); 加入.h文件中)
在主程序.h文件中 #pragma comment(lib,"libName")
extern "C" __declspec(dllimport) double SqrtTest(double & d);//放入要使用此方法的.cpp文件的.h文件中。
此时。此方法可以使用了。
待续
显示链接
现在要使用导出函数的.cpp文件对应的.h文件中声明:
tyepdef tyepReturn (FUNNAME) (typeParams ...);
然后在类中声明函数指针
FUNNAME* m_pFUN;
然后,加载.dll文件
m_hModule = ::LoadLibrary(_T("dllTest.dll"));//显式加载.dll文件。返回值式HMODULE类的对象。用于下面GetProcAddress;
m_pFUN =(FUNPoint*)::GetProcAddress(m_hModule,"SqrtTest"); //获取函数地址。
然后
double res = (*m_pFUN)(3.0); //适用返回值
待续