菜鸟问题:如何在MFC App中调用Windows SDK写的dll工程?

bluemood 2002-06-11 10:34:46
情况是这样的:现在有一大陀用纯C写的代码,里面有我要调用的函数.分别位于好几个dll工程里面.现在我用MFC新建的工程要调用,应该怎么做?我include了dll工程的几个头文件,然后编译,但是通不过,出错提示如下:
________________________________________________________________________
DIB.obj : error LNK2001: unresolved external symbol "int __stdcall CE_bmptogif(void *,char *,char *)" (?CE_bmptogif@@YGHPAXPAD1@Z)
Release/ScanTest.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
0A________________________________________________________________________

哪位大侠指导一二,小弟感激不尽...
分不够可以再加...
QQ:5818730
matchsun@hotmail.com

-
茕茕白兔,东走西顾。
衣不如新,人不如故。
...全文
92 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluemood 2002-06-11
  • 打赏
  • 举报
回复
现在我把所有可能的用到的Dll工程全部加到一个workspace中了,并设置为新工程的dependencies,编译后出现了error lNK2001...
Linking...
iul_lib5.obj : error LNK2001: unresolved external symbol _INS_currentfilesize
release/UPGRADE.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
mty 2002-06-11
  • 打赏
  • 举报
回复
1).static link the DLL library
i).Project-->Set-->Link--->Add the .lib file into the "Library" EDIT control..
ii). include your .h file to your project, extern "C" TYPE fun()..; if can not... remove the extern "C"
2). Dynamic link the DLL library
i). declare pointer function in head file:
TYPEDEF int (*myfunc)(PARAMETER LIST..);
2). HINSTANCE handle = LoadLibrary("myDLL.dll");
myfunc f1 = (myfunc) GetProcAddr(handle, "YOUR FUNC NAME");
f1(PARAMETER LIST..);

the above two method are ok, I`m using now..
bluemood 2002-06-11
  • 打赏
  • 举报
回复
我再试试,谢谢大家:)
我原来的LIB是在VC下编译release的.
不能编译debug的.
finalvictory 2002-06-11
  • 打赏
  • 举报
回复
你原来的LIB在什么模式下编译的?
bugz 2002-06-11
  • 打赏
  • 举报
回复
CE_bmptogif@@YGHPAXPAD1@Z
这个显然是被C++的名字搅拌处理过了。
bugz 2002-06-11
  • 打赏
  • 举报
回复
你先把lib文件copy到工程文件所在和源文件的目录
在project->setting->link中加上所有的lib,另外给你的所有.h里的函数
用extern "C" {



}
包起来
bluemood 2002-06-11
  • 打赏
  • 举报
回复
to chenhg(),我加入过了.因为这些代码常常被用到.所以我很早前就在Tools->Options中设置了.
cwanter 2002-06-11
  • 打赏
  • 举报
回复
你先把lib文件copy到工程文件所在和源文件的目录,不行的话再试试 xuying() 的第二步,再不行读一下http://www.csdn.net/Expert/topicview.asp?id=634410. ^o^
bluemood 2002-06-11
  • 打赏
  • 举报
回复
#pragma comment(lib,"picul.lib")加入过了,仍然错误...
:'(
chenhg 2002-06-11
  • 打赏
  • 举报
回复
你得在TOOL->options->directory中加上你的.lib和include的路径
bluemood 2002-06-11
  • 打赏
  • 举报
回复
遵照cwanter(LDT->GDT)的提示,拷贝.lib文件到源文件所在目录,还是不行.出错提示照旧...

对了..会不会是我用到的.dll中调用了别的dll中的函数?
Yokishiro 2002-06-11
  • 打赏
  • 举报
回复
拷贝到目录并没有加入到工程
#pragma comment(lib,"yourlib.lib")
bluemood 2002-06-11
  • 打赏
  • 举报
回复
我试过了xuying() 说的.加入了lib文件(拷贝到新工程的debug目录),在头文件中加入了extern "C" 的声明了,可是还是不行.错误代码:
Linking...
DIB.obj : error LNK2001: unresolved external symbol "int __stdcall CE_bmptogif(void *,char *,char *)" (?CE_bmptogif@@YGHPAXPAD1@Z)
Release/ScanTest.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
cwanter 2002-06-11
  • 打赏
  • 举报
回复
copy到工程文件和源文件所在的目录,一般是debug的上一层目录。
================================================================

 就当我是灌水。^o^

bluemood 2002-06-11
  • 打赏
  • 举报
回复

是在project setting->Link 的里面的Object/Library modules(General和Input)中加入.lib文件吗?那我需要把那些.lib文件拷到新mfc工程的release 或debug目录下吗?
谢谢
xuying 2002-06-11
  • 打赏
  • 举报
回复
1. 要在project->settings->link页内的object/library modules内加上相应的.lib文件。

2. 对于c写的函数,在c++中使用时要特别声明一下,前面要加上extern "C"
例如有一个c写的函数int foo();在C++中使用时,要声明为:
extern "C" int foo();

这是因为c的连接程序和c++的连接程序对函数的命名方式不一致造成的。
wiler 2002-06-11
  • 打赏
  • 举报
回复
同意楼上的
cwanter 2002-06-11
  • 打赏
  • 举报
回复
你要在工程中包含你用的DLL的LIB文件。
================================================================

    就当我是灌水。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧