LNK2001:我要设置什么?

继我之前关于调试本机代码的问题之后,我决定从控制台应用程序创建一个简单的测试,因为我无法直接调试服务。 所以我创建了一个vc6控制台应用程序,将dll项目添加到工作区并运行它。 它没有按预期执行,而是吐出以下链接器错误:
 main.obj : error LNK2001: unresolved external symbol "int __stdcall hmDocumentLAdd(char *,char *,long,char *,char *,long,long,long,long *)" (?hmDocumentLAdd@@YGHPAD0J00JJJPAJ@Z)
 main.obj : error LNK2001: unresolved external symbol "int __stdcall hmGetDocBasePath(char *,long)" (?hmGetDocBasePath@@YGHPADJ@Z)
 Debug/HazManTest.exe : fatal error LNK1120: 2 unresolved externals
这似乎是在链接器选项中忘记某些内容的简单情况:但是一切似乎都是正常的,并且lib文件,dll和源是可用的。如果我将lib文件更改为加载为无意义,它会启动
fatal error LNK1104: cannot open file "asdf.lib"
,因此这不是问题。 我之前已经联系过dll,他们刚刚工作过,所以我有什么办法呢? 更新:根据这个帖子,我看看是否可以找到任何其他信息。这就是来自VS2005的dumpbin给我的东西。
> dumpbin /linkermember Hazardman.lib | findstr "DocumentLAdd"
     F6DC __imp__hmDocumentLAdd@36
     F6DC _hmDocumentLAdd@36
       5B __imp__hmDocumentLAdd@36
       5B _hmDocumentLAdd@36
然后通过undname运行它会导致:
> undname ?_hmDocumentLAdd@36
Microsoft (R) C++ Name Undecorator
Copyright (C) Microsoft Corporation. All rights reserved.

Undecoration of :- "?_hmDocumentLAdd@36"
is :- "?_hmDocumentLAdd@36"
这是错的。如果我从IDE中输入错误的名称,它会给出更好的结果:
> undname ?hmDocumentLAdd@@YGHPAD0J00JJJPAJ@Z
Microsoft (R) C++ Name Undecorator
Copyright (C) Microsoft Corporation. All rights reserved.

Undecoration of :- "?hmDocumentLAdd@@YGHPAD0J00JJJPAJ@Z"
is :- "int __stdcall hmDocumentLAdd(char *,char *,long,char *,char *,long,long,l
ong,long *)"
现在我有了这些信息,我该怎么办呢?从Raymond Chen的文章看来,我可以手动修复它但是调整了一个选项,但是我无法从我的结果中看出需要什么选项(是否有'忽略所有参数'复选框?!)。 所以看起来它正在寻找不存在的函数或者函数的参数已被关闭(或者dumpbin不喜欢VC6库),但是stil并没有让我更接近我修复问题的目标。     
已邀请:
您使用正确的呼叫约定吗? 您的图书馆似乎使用
stdcall
。也许您的测试代码使用
cdecl
(似乎是默认值)。 根据此页面,链接器名称装饰在caling约定之间有所不同,因此这可以解释您看到的症状。     

要回复问题请先登录注册