如何在没有类型转换的情况下使用getProcAddress()
how to use getProcAddress() without type cast?
我正在尝试使用getprocaddress查找变量的地址。但我在这方面遇到了问题。问题是,我在循环中一个接一个地将变量的名称存储在char-buff[100]中。那一次我不知道变量的类型。那么如何在没有类型转换的情况下使用它呢。我尝试使用void*ptr来避免类型转换。我得到ptr的值为零。
void *ptr;
HMODULE hdl;
char buff[100];
char word[100];
char ch1;
int total_item=0;
META_INFO_FILE=fopen("META.txt","r");
do {
ch1 = fscanf(META_INFO_FILE,"%s",word);
if ((word[0]== '_'))
{
strcpy(META_buff,word+1);
hdl = GetModuleHandle (NULL); // handle of executable
ptr =GetProcAddress (hdl, META_buff);
total_item++;
} while (ch1 != EOF);
感谢
好吧,您的ptr
为NULL,因为您找不到名称。这与铸造完全无关。(例如,你可能需要摆弄DLLExport之类的东西来使你的符号可见)如果这是你的问题,那么我们就到此为止了。[顺便说一句,在你的例子中,buff
看起来像一个局部变量。根据定义,它们不能从DLL导出,因为这种变量只有在函数"在活动调用堆栈中"时才可用。你不能真正将符号导出到导出时不存在的变量…
但我怀疑你在问"如果我能找到这个符号,我该如何使用它"。
简短的回答是"你不能那样做"。
长篇大论的答案是"你不能那样做",但有一点可能的解决方案。您必须以某种方式在META_INFO_FILE
中编码您拥有的数据类型。至少如果您想做任何事情,而不是对结果调用memcpy(ptr, somestuff, somesize)
。
我还认为可能有更好的方法来做到这一点。至少,如果你正在处理的是你自己的代码——如果你正在"修补"别人的代码,那你就太丢脸了。
例如,你可以引入你自己的符号,其中有关于它是什么类型的信息,等等
例如:
enum Type { CHAR_TYPE, INT_TYPE, /* more types here ... */ }
struct
{
char *name;
Type type;
char *size;
void *ptr;
}
mysymbols [] =
{
{ "buff", CHAR_TYPE, sizeof(buff), &buff },
{ "other", INT_TYPE, sizeof(other), &other },
};
现在,您可以搜索该列表,然后使用"开关"转换为正确的类型。
相关文章:
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- GetProcAddress vs __declspec( dllimport )
- 'dll_file'可以是"0":这不符合函数的规范'GetProcAddress'
- 如何将 GetProcAddress 与 JNA 一起使用?
- GetProcAddress 无法正常工作
- 从 GetProcAddress 获取的函数指针在使用 stdlib 时会使程序崩溃
- 如何使用 WinDbg 查找"GetProcAddress"函数的进程名称
- GetProcAddress fails
- 在 GetProcAddress 的 lpProcName 中是否有 DLL 函数修饰的参考
- 为什么传统的 GetProcAddress 到 std::function 并不简单
- 为什么 GetProcAddress 在实现时会引发异常
- GetProcAddress 在 c++ 中返回错误代码 127
- 如何在没有类型转换的情况下使用getProcAddress()
- C++ GetProcAddress 64 位返回 32 位地址
- 指向多个参数的函数指针 C++11 std::function:模板化 GetProcAddress
- 铸造getProcaddress在C 中返回指针
- getProcAddress()为我的Hello World功能返回null
- getprocaddress的类似函数使用结构
- IIS:在 ISAPI 筛选器上调用 GetProcAddress 失败
- getProcAddress - NULL is returned