[Quote=引用 2 楼 visualeleven 的回复:]
extern void Writeintowinini(CString appname,CString keyname,CString str);
-->
typedef void (*WriteintowininiProc)(CString appname,CString keyname,CString str);
HMODULE hDll = LoadLibrary(...);
W……
[/Quote]
现在我来用2楼的帖来给出能够使用的完整程序,不过有几个地方,我仍然不明白:
<1> : 在调用该函数时,头文件使用<afx.h>取代<windows.h> !
错误如下:
Compiling...
dlltr.cpp
Linking...
nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in libcpd.lib(delop.obj)
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/dlltr.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
dlltr.exe - 4 error(s), 0 warning(s)
<2> : 通过project->setting->link 去连接这个动态链接库,是有错误的.错误如下:
Compiling...
dlltr.cpp
Linking...
dlltr.obj : error LNK2001: unresolved external symbol "int __cdecl Writeintowinini(char const *,char const *,char const *)" (?Writeintowinini@@YAHPBD00@Z)
Debug/dlltr.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
dlltr.exe - 2 error(s), 0 warning(s)
<3> :下面给出所有程序以供大家参考:
1: dll项目中
#include<afx.h>
_declspec(dllexport) void _stdcall Writeintowinini(LPTSTR appname,LPTSTR keyname,LPTSTR str){
WriteProfileString(appname,keyname,str);
}
2 : def文件如下:
LIBRARY
EXPORTS
Writeintowinini @1
3 :VC++程序中:
#include<iostream>
#include<windows.h>
using namespace std;
//extern Writeintowinini(LPCTSTR appname,LPCTSTR keyname,LPCTSTR str);
void main(){
HINSTANCE hDll = LoadLibrary("dll40.dll");
typedef void(_stdcall *ADDPROC)(LPCTSTR appname,LPCTSTR keyname,LPCTSTR str);
ADDPROC Writetowinini=(ADDPROC)GetProcAddress(hDll,"Writeintowinini");
if(!Writetowinini)
{
return ;
}
Writetowinini("warden","www.google.com","20110218");
//Writeintowinini("warden","www.google.com","20110218");
}
4 : 查看windows文件夹下的win.ini文件,就有写入的信息:
[warden]
www.google.com=20110218