【问题标题】:Using lib compiled in masm in c++在 c++ 中使用在 masm 中编译的 lib
【发布时间】:2013-05-16 07:56:33
【问题描述】:

我正在尝试在 masm32 中创建一个库(使用 radasm)以用于其他项目...

库源代码:

.386
.MODEL flat,stdcall
option casemap:none
.code
start:
PUBLIC HookProc
HookProc proc addy:DWORD

在 msvc 中使用:

extern "C" void* HookProc(void* ptr);
#pragma comment(lib, "TestHook.lib")

但是这会产生错误:

Win32Project1.obj : 错误 LNK2019: 函数 _wmain 中引用的未解析的外部符号 _HookProc

但我在库中看到有

!<arch>
/               1368690603              0       20        `
®_HookProc@4/               1368690603              0       26        `

为什么 msvc 在 lib 中看不到这个 proc? ;/ 这和@4 有关系吗?

编辑:更改为 .MODEL flat, c 摆脱了 @4 ,但仍然 _HookProc uresolved......

【问题讨论】:

  • 你能显示汇编文件吗?不一定是整个函数,只要声明就足够了。我提供了一个我测试和工作的小样本。

标签: c++ assembly static-libraries masm32


【解决方案1】:

CPP:

extern "C" int GetValue(void);

int main(int argc, char*arg[])
{
    char *p = "test";
    int v = GetValue();

    return 0;
}

ASM:

.486
.model flat, C
option casemap :none

.code

GetValue PROC
    mov eax, 1234
    ret
GetValue ENDP

END

【讨论】:

  • 实际上它适用于.model flat, c,所以我的失败是调用约定。
  • 嗯,回到这个组装的东西对我来说是一个很好的练习。我不得不谷歌搜索示例,因为我遇到了同样的问题。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 2010-11-16
  • 2016-11-01
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多