C++ 如何使用Visual C++;命令提示符?
我正在尝试为下面的代码构造一个DLL 测试.cppC++ 如何使用Visual C++;命令提示符?,c++,visual-studio,fatal-error,C++,Visual Studio,Fatal Error,我正在尝试为下面的代码构造一个DLL 测试.cpp #include <windows.h> bool _stdcall DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { return TRUE; } extern "C" _declspec(dllexport) bool _stdcall C_thread(LPSECURITY_ATTRIBUTES lpThreadAttr
#include <windows.h>
bool _stdcall DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
return TRUE;
}
extern "C" _declspec(dllexport) bool _stdcall C_thread(LPSECURITY_ATTRIBUTES lpThreadAttributes,SIZE_T dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId)
{
HANDLE hThread;
DWORD threadID;
hThread = CreateThread(lpThreadAttributes,dwStackSize,lpStartAddress,lpParameter,dwCreationFlags,lpThreadId);
return hThread;
}
但它显示了以下错误
fatal error LNK1561: entry point must be defined
我需要通过命令提示符选项来解决这个错误
请帮我解决这个问题。入口点类型错误:BOOL与BOOL不同(请参阅)。这不是Visual Basic,而是VisualC++。 您需要向编译器传递一个附加选项,告诉它作为DLL链接,而不是链接可执行映像。一个最简单的例子是:
#include <windows.h>
BOOL WINAPI DllMain(HANDLE hInst, DWORD dwReason, LPVOID lpReserved)
{
return TRUE;
}
BOOL WINAPI MyFunction(int value)
{
return TRUE;
}
#包括
BOOL WINAPI DllMain(HANDLE hInst、DWORD dwReason、LPVOID lpReserved)
{
返回TRUE;
}
BOOL WINAPI MyFunction(int值)
{
返回TRUE;
}
并使用
cl/nologo/W3/Ox/Zi/MD/LD test.cpp
进行编译,以获得test.dll。/Zi在.pdb文件中获取符号。我终于找到了问题的答案。下面的简单命令将有所帮助
cl/Zi/LD test.cpp首先,欢迎来到StackOverflow!我们希望在这方面有所帮助,但恐怕你的问题令人困惑。我并不想批评你,但看起来你只是从网上截取了一段你不懂的代码,然后把它扔给编译器,希望dll能弹出。也许您应该后退一步,删除您的代码示例,并尝试解释您希望实现的目标。(顺便说一句:从命令提示符创建dll将是一项非常具有挑战性的工作,即使对于一个有经验的程序员来说也是如此;您有什么特殊原因不能使用VisStudio吗?)。基本上我是linux用户。大部分在命令提示符下工作都适合我。所以,我选择了可视化命令提示符。现在我来解决我的问题。我正在为CreateThread()创建钩子函数。但是我的错误,它有错误。所以,只需在DLL中编写createThread函数。通过使用我的函数(C_thread()),我将调用CreateThread()函数。为此,我尝试构造一个DLL。所以,我编译了它。但它显示了致命的错误。
#include <windows.h>
bool _stdcall DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
return TRUE;
}
extern "C" _declspec(dllexport) bool _stdcall C_thread(LPSECURITY_ATTRIBUTES lpThreadAttributes,SIZE_T dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId)
{
HANDLE hThread;
DWORD threadID;
hThread = CreateThread(lpThreadAttributes,dwStackSize,lpStartAddress,lpParameter,dwCreationFlags,lpThreadId);
return hThread;
}