我创建了一个Dll项目。 我创建了一个名为myasm.asm的文件,其中包含一个函数:
.486
.model flat, stdcall
.code
MyProc1 proc x: DWORD, y: DWORD
xor eax,eax
//......//
ret
MyProc1 endp
end
这里是我的头文件:
#pragma once
#include <Windows.h>
#ifdef LAB1DLL_EXPORTS
#define LAB1DLL_API __declspec(dllexport)
#else
#define LAB1DLL_API __declspec(dllimport)
#endif
extern "C"
{
LAB1DLL_API int _stdcall MyProc1(DWORD x, DWORD y);
}
并且dllMain(它的开头)
#define LAB1DLL_EXPORTS 1
#include "Lab1Dll.h"
在我的测试应用程序中,我想要使用那个dll文件和它导出的函数,我有以下代码:
#include "Lab1Dll.h"
但我的dll没有导出MyProc1函数。 如果我向该DLL添加“普通”函数并将其导出,那么它就可以在我的Test应用程序中使用,并且DLL编译过程会生成lib文件。
如果没有“普通”函数,我就不会得到.lib文件。 我无法链接到该库。
如何使导出的函数起作用? 或者如何使其首先导出?
更新: 我看到添加以下内容的.def文件可以完美工作。 但是,我不应该这样做。 __declspec(dllexport)应该为我做到这一点?
LIBRARY
EXPORTS
MyProc1
dumpbin
进行检查。尝试在myasm.asm
中使用其装饰/修饰过的名称定义过程(但不要在头文件和 C 源文件中定义)。其他建议请参考:https://dev59.com/3XE85IYBdhLWcg3wYSZk - Ruud Helderman