jjzjj

GetProcAddress

全部标签

c++ - 在 DLL 中的哪里调用 LoadLibrary?

我正在制作一个DLL,它使用LoadLibrary动态加载另一个DLL(winsock)。我读到我不应该在DllMain中调用LoadLibrary,但我反复使用它并且不想每次使用它时都必须调用LoadLibrary/GetProcAddress。所以我的问题是:在DLL中调用LoadLibrary的最佳位置在哪里?LoadLibrary/GetProcAddress有多快?在每个函数中都这样做是不是开销很大? 最佳答案 创建一个在DllMain之外进行设置的初始化函数。您的代码会在加载DLL后调用该函数,然后它可以调用完成初始化所

C# GetProcAddress 返回零

出于某种原因,每当我的C#.NET2.0应用程序调用GetProcAddress时,它总是返回零。publicclassMyClass{internalstaticclassUnsafeNativeMethods{[DllImport("kernel32.dll",CharSet=CharSet.Auto,SetLastError=true)]internalstaticexternIntPtrLoadLibrary(stringlpFileName);[DllImport("kernel32.dll",CharSet=CharSet.Auto,SetLastError=true)]i

c++ - 将函数指针从一种类型转换为另一种类型的最佳方法是什么?

我在StackOverflow上搜索了一个答案,但我没有得到任何关于这个问题的具体信息:只有关于使用各种类型的转换运算符的一般情况。因此,恰当的例子是使用WindowsGetProcAddress()API调用检索函数地址时,它返回类型为FARPROC的函数指针,其中:typedefINT_PTR(__stdcall*FARPROC)();.问题是,很少(如果有的话)寻求的实际函数具有此实际签名,如下面的MRCE代码所示。在这段代码中,我展示了将返回值转换为适当类型的函数指针的各种不同尝试,除第四种方法外,所有方法都被注释掉了:#include#includetypedefDPI_AW

c++ - 使用 GetProcAddress : callback function fails with invalid parameter 从 C++ 调用 Delphi DLL

我有一个从C++调用的第3方DelphiDLL。不幸的是,我无法访问PascalDLL代码,也不是Pascal程序员。没有lib文件,所以我使用GetProcAddress调用许多DLL函数,成功地通过值、地址和引用传递参数。我还注册了一个回调函数,它会在预期时被调用。我的问题是在回调函数中,无法评估两个参数之一(地址0x000001)。这是PascalDLL函数声明typeHANDLE=Pointer;///handle(**ThisfunctionRegistersthecallbackfunctionOnACLNeeded*)functionRegisterCallback(h:

为什么不能通过GetProcAddress调用CreateWindow?

有时候,我看到有些人在折腾这样一个问题:“我想使用GetProcAddress来获取CreateWindow或者ExitWindows的调用地址,但是没有成功。为什么?”通常,他们当时是在尝试编写平台调用(P/Invoke)相关的代码,因为从底层的角度来看,平台调用是通过GetProcAddress来实现的。问题来了:为什么GetProcAddress不能用在这些函数上呢?原因是:它们(CreateWindow或ExitWindows)并非真正的导出函数,如果你查看对应的头文件,则会看到这样的宏定义。事实上,CreateWindow是一个双重宏定义,首先它会根据当前是否定义了UNICODE来展

c++ - 如何解决有关使用 FARPROC 调用 GetProcAddress 的 C4191 警告?

最近我尝试使用/WallVisualC++option启用所有警告,发现如下代码:typedefBOOL(WINAPI*TIsWow64ProcessFunction)(HANDLE,BOOL*);TIsWow64ProcessFunctionisWow64ProcessFunction=reinterpret_cast(::GetProcAddress(kernel32DllHandle,"IsWow64Process"));生成C4191:warningC4191:'reinterpret_cast':unsafeconversionfrom'FARPROC'to'TIsWow64

c - 如何使用 LoadLibrary() 和 GetProcAddress() 函数将 ntdll.dll 添加到项目库中?

我想用NtQueryInformationThread获取线程的起始地址,但我需要添加它的库。我该怎么做? 最佳答案 我更喜欢将ntdll.lib(您可以在WindowsDDK/WDK中找到它)添加到项目中。在这种情况下,您不需要GetProcAddress东西。 关于c-如何使用LoadLibrary()和GetProcAddress()函数将ntdll.dll添加到项目库中?,我们在StackOverflow上找到一个类似的问题: https://stac

c++ - 将新的 Windows 功能与回退一起使用

我使用动态库和GetProcAddress的东西已经有一段时间了,但它总是看起来乏味、智能感知敌对和丑陋的做事方式。有谁知道在保持与旧操作系统兼容的同时导入新功能的简洁方法。假设我想使用一个XML库,它是Vista的一部分。我调用LoadLibraryW,然后如果HANDLE不为空,我就可以使用这些函数。但我真的不想去#typedef(void*)(PFNFOOOBAR)(int,int,int)和PFNFOOOBARfoo=reinterpret_cast(GetProcAddress(GetModuleHandle(),"somecoolfunction"));,一直乘以50,方式

c++ - 为什么 GetProcAddress 不起作用?

首先,我创建一个名为SimpleDll.dll的简单dll,其头文件://SimpleDll.h#ifdefMYLIBAPI#else#defineMYLIBAPI__declspec(dllimport)#endifMYLIBAPIintAdd(inta.intb);其源代码://SimpleDll.c#include#defineMYLIBAPI__declspec(dllexport)#include"SimpleDll.h"intAdd(inta,intb){returna+b;}然后我在另一个项目中调用它,它工作正常://TestSimpleDll.c#include"std

windows - 有没有办法找到要在 GetProcAddress 中使用的 C++ 损坏名称?

在C++中使用GetProcAddress的常见“解决方案”是“extern“C”,但这会破坏重载。名称重整允许多个函数共存,只要它们的签名不同即可。但是有没有办法为GetProcAddress找到这些损坏的名称? 最佳答案 VC++编译器知道它自己的名称修改方案,那么为什么不使用它呢?里面templateTGetProcAddress(HMODULEh,constchar*name),宏__FUNCDNAME__包含GetProcAddress的损坏名称.这包括T部分。所以,里面GetProcAddress,我们有一个子字符串,其