我想有一个Visual Studio项目,它构建一个DLL文件和一个导入库(.lib)文件.(导入库是一个静态链接库,负责在其他使用它的项目中加载该DLL文件).
所以我去了Visual Studio C++ 2008 Express Edition,创建了类库类型的新项目,并将"配置类型"设置为"Dyanamic Library(.dll)".
但是当我构建解决方案时,我看到的唯一相关输出文件是DLL文件; 我没有看到生成任何LIB文件.我查看了项目目录和所有子目录(Release和Debug).
我相信可以同时构建LIB和DLL文件,因为在MSDN上它说"链接器在构建DLL时创建导入库". 此外,该网站的另一个用户是使用Visual C++同时创建LIB和DLL文件.
那我该怎么办呢?
首先我认为dll DLLMain中的入口点,但是当我尝试在C#中导入它时,我得到一个错误,找不到入口点这是我的代码:
#include <Windows.h>
int Test(int x,int y)
{
return x+y;
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
MessageBox(0,L"Test",L"From unmanaged dll",0);
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Run Code Online (Sandbox Code Playgroud)
如何为我的dll设置入口点?如果你不介意,你可以给我一些关于切入点的解释吗?
像我必须再次设置导入相同的DLL并更改入口点,以便我可以在同一个DLL中使用其他功能?提前致谢.
我在linux中做了很多编程,并使用visibility属性来定义符号在共享对象中是可见还是隐藏.只是为了让事情更清晰:如果一个符号是可见的,它将在外部访问(某人与共享对象链接),如果它被隐藏,它应该只在内部使用.
在Windows上它看起来有点不同,它适用于导出(符号在此处定义在共享对象中,并且可以由与此链接的人访问)和导入(这里我链接到共享对象并且符号被导出那里)符号.但我找不到告诉编译器不导出符号的方法,因为它只能在这里使用,即如果有人链接它,则需要链接器错误.
我的问题是,如果我可以将符号定义为"隐藏"(如在linux的gcc中)以及如何.此外,所有这些在Windows主题中的可见性对我来说有点模糊,我正在寻找一些进一步阅读链接,以更好地了解一切如何工作.