【问题标题】:How do I construct a DLL using Visual C++ command prompt?如何使用 Visual C++ 命令提示符构建 DLL?
【发布时间】:2014-03-20 14:43:43
【问题描述】:

我正在尝试为以下代码构建一个 DLL。

test.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 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;

}

首先我尝试通过在可视命令提示符下使用以下命令来编译它。

cl /Zi test.cpp kernel32.lib

但它显示以下错误。

fatal error LNK1561: entry point must be defined

我需要通过命令提示选项来解决这个错误。

请帮我解决这个问题。

【问题讨论】:

  • 首先,欢迎来到 StackOverflow!我们希望在这里提供帮助,但恐怕您的问题令人困惑。我并不是要批评,但看起来你只是从网上抓取了一段你不理解的代码,然后你把它扔给编译器,希望会弹出一个 dll。也许您应该退后一步,删除您的代码示例,并尝试解释您希望完成的任务。 (顺便说一句:从命令提示符创建一个 dll 将非常具有挑战性,即使对于有经验的程序员也是如此;您不能使用 VisStudio 有什么特别的原因吗?)
  • 感谢您的回复。基本上我是linux用户。主要是在命令提示符下工作适合我。所以,我选择了可​​视命令提示符。
  • 现在我来解决我的问题。我正在为 CreateThread() 创建 Hook 函数。但我的错误,它有错误。所以,只需在 DLL 中编写一个 createThread 函数。通过使用我的函数 (C_thread()) 我将调用 CreateThread() 函数。为此,我尝试构建一个 DLL。所以,我编译了它。但它显示致命错误

标签: c++ visual-studio fatal-error


【解决方案1】:

入口点类型错误:BOOL 与 bool 不同(参见DllMain on MSDN)。这不是 Visual Basic,而是 Visual C++。

您需要向编译器传递一个附加选项,告诉它作为 DLL 链接而不是链接可执行映像。一个最小的例子是:

#include <windows.h>
BOOL WINAPI DllMain(HANDLE hInst, DWORD dwReason, LPVOID lpReserved)
{
    return TRUE;
}
BOOL WINAPI MyFunction(int value)
{
    return TRUE;
}

并用cl /nologo /W3 /Ox /Zi /MD /LD test.cpp 编译得到一个test.dll。 /Zi 为您获取 .pdb 文件中的符号。

【讨论】:

    【解决方案2】:

    我终于找到了我的问题的答案。下面的简单命令会有所帮助。

    cl /Zi /LD test.cpp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-27
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      • 2021-08-20
      • 2021-04-03
      • 1970-01-01
      相关资源
      最近更新 更多