在我的DLL中有如下两个函数:
bool InitDog(WORD inp1,WORD inp2,WORD inp3,WORD inp4);
int WriteData(int modelno,int modelpwd,int day1,int day2,int com1,int com2,int userid);
用外部程序调这2个DLL函数,结果InitDog没问题,但若调WriteData就编译报错:
CallDogDllDlg.obj : error LNK2001: unresolved external symbol "int __cdecl WriteData(int,int,int,int,int,int,int)" (?WriteData@@YAHHHHHHHH@Z)
Debug/CallDogDll.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
该怎么办?
我试过加extern "C" __declspec(dllexport)不行,
加LIB也不行,求解!
bool InitDog(WORD inp1,WORD inp2,WORD inp3,WORD inp4);
int WriteData(int modelno,int modelpwd,int day1,int day2,int com1,int com2,int userid);
用外部程序调这2个DLL函数,结果InitDog没问题,但若调WriteData就编译报错:
CallDogDllDlg.obj : error LNK2001: unresolved external symbol "int __cdecl WriteData(int,int,int,int,int,int,int)" (?WriteData@@YAHHHHHHHH@Z)
Debug/CallDogDll.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
该怎么办?
我试过加extern "C" __declspec(dllexport)不行,
加LIB也不行,求解!
解决方案 »
- CDatebase.Open打开Access数据库的问题
- 对话框的问题?
- 在一个线程中可以向所有与服务器连接的客户发送信息吗? 请看以下代码对不! 谢谢
- 请问静态文本框的背景颜色刷新问题......
- 高分求助,在线等待!我想画一个圆,中间用直线分开来表示各个部分的百分比,应该怎么画呢?
- 网卡设成混杂模式,有人成功了吗?
- 怎样将CString类型的数据做为switch...case语句中的条件表达式?
- 简单问题
- 怎样在CHtmlView中实现检索并对检索到的字高亮显示?
- 在MFC中出现libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main错误的可能有几种,如何解决?
- 关于线程
- 谁把我的IE的首页地址搞的不能改了?
你的InitDog能用,WriteData也应该能用。
检查一下,是不是漏了什么?LIB,H,DLL文件没更新(编译过后没COPY到工程目录下)???
比较了能用的InitDog和不能用的WriteData发现:WriteData里用到了sprintf和strcpy
会是这2个函数的问题吗?
打开你的DLL就可以看到所有引出的函数了。
。。下部引出的。没有显示,就是你没引出,
你的DLL写的有点问题,
看看所有写InitDog和writedata的地方有什么不同,我想你应该知道怎么做,因为InitDog已经引出了。
extern "C" __declspec(dllexport)
bool InitDog(WORD inp1,WORD inp2,WORD inp3,WORD inp4);
int WriteData(int modelno,int modelpwd,int day1,int day2,int com1,int com2,int userid);.cpp中 :(Rockey是另外厂家提供的OBJ中的函数)
bool InitDog(WORD inp1,WORD inp2,WORD inp3,WORD inp4)
{
char cmd[] = "H=H^H, A=A*23, F=B*17, A=A+F, A=A+G, A=A<C, A=A^D, B=B^B, C=C^C, D=D^D";
char cmd1[] = "A=A+B, A=A+C, A=A+D, A=A+E, A=A+F, A=A+G, A=A+H";
char cmd2[] = "A=E|E, B=F|F, C=G|G, D=H|H"; p1=inp1;p2=inp2;p3=inp3;p4=inp4; retcode = Rockey(RY_FIND, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
return false;
} retcode = Rockey(RY_OPEN, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
return false;
} return true;
}int qyWriteData(int modelno,int modelpwd,int day1,int day2,int com1,int com2,int userid)
{
p1 = 3;
p2 = 15;
char writestr[100]; sprintf(writestr,"%01X%06X%03X%03X%01X%01X",modelno,modelpwd,day1,day2,com1,com2); strcpy((char*)buffer, writestr); retcode = Rockey(RY_WRITE, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
return retcode;
} lp1=userid; retcode = Rockey(RY_WRITE_USERID, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
return retcode;
}
return 0;
}
我不行了,大哥救我!
.h 中:
extern "C" __declspec(dllexport)
bool WINAPI InitDog(WORD inp1,WORD inp2,WORD inp3,WORD inp4);extern "C" __declspec(dllexport)
int WINAPI WriteData(int modelno,int modelpwd,int day1,int day2,int com1,int com2,int userid);.cpp中 :(Rockey是另外厂家提供的OBJ中的函数)
bool InitDog(WORD inp1,WORD inp2,WORD inp3,WORD inp4)
{
char cmd[] = "H=H^H, A=A*23, F=B*17, A=A+F, A=A+G, A=A<C, A=A^D, B=B^B, C=C^C, D=D^D";
char cmd1[] = "A=A+B, A=A+C, A=A+D, A=A+E, A=A+F, A=A+G, A=A+H";
char cmd2[] = "A=E|E, B=F|F, C=G|G, D=H|H"; p1=inp1;p2=inp2;p3=inp3;p4=inp4; retcode = Rockey(RY_FIND, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
return false;
} retcode = Rockey(RY_OPEN, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
return false;
} return true;
}int WriteData(int modelno,int modelpwd,int day1,int day2,int com1,int com2,int userid)
{
p1 = 3;
p2 = 15;
char writestr[100]; sprintf(writestr,"%01X%06X%03X%03X%01X%01X",modelno,modelpwd,day1,day2,com1,com2); strcpy((char*)buffer, writestr); retcode = Rockey(RY_WRITE, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
return retcode;
} lp1=userid; retcode = Rockey(RY_WRITE_USERID, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
return retcode;
}
return 0;
}
.h
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
int WINAPI FUNCTIONNAME1(..);
void WINAPI FUNCTIONANEM2(..);
#ifdef __cplusplus
}
#endif.cpp
extern "C"
int WINAPI FUNCTIONNAME1(....)
{
...}extern "C"
void WINAPI FUNCTIONNAME2(...)
{
...
}并在DLL工程中加一个和工程名(DLL名)一样的DEF文件XXXX。DEF
.def; xxxx.def : Declares the module parameters for the DLL.LIBRARY "xxxx"
DESCRIPTION 'xxxx Windows Dynamic Link Library'EXPORTS
; Explicit exports can go here
FUNCTIONNAME1 @1
FUNCTIONNAME2 @2