首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有任何装饰的__stdcall

没有任何装饰的__stdcall
EN

Stack Overflow用户
提问于 2012-03-26 10:34:13
回答 2查看 1.1K关注 0票数 2

我有一个.dll,我怀疑它使用__stdcall函数,但是完全没有修饰的名称(甚至不是下划线或@符号)。我为它编写了一个.def文件,别名如下

代码语言:javascript
复制
func1 = func1
func1@4 = func1

但是我认为lib (我用它来从.def文件创建导入库)忽略了别名(链接器仍然说func1@4是未定义的)。

如何创建将func1@4映射到func1的导入库?

EN

回答 2

Stack Overflow用户

发布于 2012-03-26 13:00:03

我不知道是否可以用.lib创建正确的lib.exe文件,所以我建议使用原始DLL导出的函数存根创建一个DLL。

示例dll.cpp文件:

代码语言:javascript
复制
void __stdcall foo(int) {}

dll.def文件:

代码语言:javascript
复制
EXPORTS
foo=foo

然后从IDE或命令行编译它:

代码语言:javascript
复制
cl dll.cpp /link /dll /def:dll.def /noentry

它将创建正确的dll.lib文件,因此您可以将其与如下代码一起使用:

代码语言:javascript
复制
void __stdcall foo(int);
#pragma comment(lib, "dll")
int main()
{
    foo(42);
}
票数 2
EN

Stack Overflow用户

发布于 2012-03-26 10:42:52

您应该将函数原型声明为extern "C“,因为您(显然)在C++模式下编译:

代码语言:javascript
复制
extern "C" void func1(void); // correct prototype, add __stdcall if necessary?

可以将头文件的整个部分包装在其中。

代码语言:javascript
复制
extern "C" {
    // ... C compatible declarations
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9870562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档