【问题标题】:passing arguments to funcyion in dll C++将参数传递给dll C++中的函数
【发布时间】:2013-08-23 18:24:19
【问题描述】:

我在 dll 的函数中得到垃圾值。

在 FUNC1(int) 中我得到垃圾值,有什么帮助吗??

.h 的 dll

class __declspec(dllexport) Class1
    {
    public:
          bool __stdcall FUNC1(int);
}

FUNC1 定义

bool Class1::FUNC1(int i)
{
//here im getting i as some garbage value
   (500==i) ? return true: return false;
}

这就是我调用 FUNC1 的方式

FARPROC lpfnGetProcessID = GetProcAddress(HMODULE (hGetProcIDDLL),FUNC1); 
        if(lpfnGetProcessID == NULL) 
        {
            return false;
        }

        typedef int (__stdcall * pICFUNC)(int);
        pICFUNC dllFunc;
        dllFunc = pICFUNC(lpfnGetProcessID); 

        int op = dllFunc(500);

【问题讨论】:

  • 你没有做错误检查你有一个有效的函数指针。
  • 编辑的 FUNC1 声明

标签: c++ function dll integer parameter-passing


【解决方案1】:

FUNC1 被声明为函数,但定义是“类”的方法。由于它们不匹配,因此实现将期望在堆栈上有一个 this 指针和一个参数。调用者只推送 i 参数,实现将在错误的内存位置查找它。

【讨论】:

  • 我喜欢包含 FUNC1 的 dll 的 def 文件
  • 即使在这种情况下,pICFUNC 也是一个指向原型为“int __stdcall func(int x)”的函数的指针。你需要的是一个指向类的成员函数的指针;那将是“typedef int __stdcall (Class::*pICFUNC)(int)”。这个指针的调用现在变得有趣了:“(obj.*pICFUNC)(500)”。
猜你喜欢
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 2012-04-16
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多