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

这篇博客讨论了在调用DLL动态库时遇到的函数类型不匹配问题,包括头文件使用错误导致的编译错误(如使用<afx.h>替换<windows.h>)和链接错误(如未正确链接动态库)。博主分享了解决这些问题的完整程序示例,包括DLL项目、DEF文件和主程序的代码,并展示了成功写入win.ini文件的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值