gpt4 book ai didi

c++ - 无法加载自定义 DLL

转载 作者:太空狗 更新时间:2023-10-29 22:56:17 26 4
gpt4 key购买 nike

我创建了一个用于打开 cmd.exe 的简单 DLL。

我用这些选项做到了:
enter image description here enter image description here

在默认的 dlllmain.cpp 中,我添加了一个代码来创建一个新的 cmd.exe:

// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
#include <Windows.h>

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
STARTUPINFO info = { sizeof(info) };
PROCESS_INFORMATION processInfo;
BOOL h = CreateProcessW(L"C:\\Windows\\System32\\cmd.exe", L"", NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo);
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

DLL_PROCESS_ATTACH 下面的这三行在我用控制台应用程序测试它时对我有用。

我希望加载此 DLL 的每个进程都将打开 cmd.exe

我尝试使用 PowerShell 加载 DLL:

Add-Type -TypeDefinition @"
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

public static class Kernel32
{
[DllImport("kernel32", SetLastError=true, CharSet = CharSet.Ansi)]
public static extern IntPtr LoadLibrary(
[MarshalAs(UnmanagedType.LPStr)]string lpFileName);
}


"@

$LibHandle = [Kernel32]::LoadLibrary("C:\tmp\myDll.dll")

但是没有任何反应,$LibHandle 的值为 0

我做错了什么?

最佳答案

我找到问题所在了。
我的系统是64位的,文件是用32位编译的。
我需要在 Visual Studio 中指定我正在以 x64 位编译它。
enter image description here

我一开始没有检查它,因为我认为当我在“Any CPU”模式下编译它时,它会自动将文件编译为 64 位作为操作系统架构。

现在一切正常。

关于c++ - 无法加载自定义 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48641113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com