调用dll动态库时,函数类型不匹配,可能的解决方案!

    技术2026-08-13  1

    [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.cppLinking...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 __endthreadexnafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadexDebug/dlltr.exe : fatal error LNK1120: 2 unresolved externalsError executing link.exe.

    dlltr.exe - 4 error(s), 0 warning(s)

    <2> : 通过project->setting->link 去连接这个动态链接库,是有错误的.错误如下:Compiling...dlltr.cppLinking...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 externalsError 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文件如下:LIBRARYEXPORTSWriteintowinini @13 :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

    最新回复(0)