在c++和visual studio中通过GetProcAddress()与DLL函数进行接口
interfacing with a DLL function through GetProcAddress() in C++ and visual studio
好了,伙计们,这是我上一篇文章的扩展,已经解决了,这部分工作得很好
没有找到使用GetProcAddress() c++ VBexpress 13的函数
不幸的是,另一个误解产生了。下面是我要引用的代码:
#include "stdafx.h"
#include <iostream>
#include "Windows.h"
#include <stdio.h>
typedef int(__cdecl *MYPROC)(LPWSTR);
using namespace std;
int main()
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
hinstLib = LoadLibrary(TEXT("testDLL.dll"));
if (hinstLib != NULL)
{
ProcAdd = (MYPROC)GetProcAddress(hinstLib, "?Add@MyMathFuncs@MathFuncs@@SANNN@Z");
// If the function address is valid, call the function.
if (NULL != ProcAdd)
{
fRunTimeLinkSuccess = TRUE;
c=(ProcAdd)(L"something here");
}
fFreeResult = FreeLibrary(hinstLib);
}
return 0;
}
问题是:在与函数交互时遇到麻烦。程序识别DLL和函数。我确信它与类型定义、ProcAdd的赋值以及我对函数的实际调用有关。在这个例子中,我正在调用一个函数,将双精度加在一起。显然我需要通过两次双打。似乎逻辑会决定我可以将typedef替换为'typedef int(__cdecl *MYPROC)(double,double);'或类似的东西,并将L"这里的东西"替换为2双精度并将其分配给一个值。当我这样做时,没有运行时错误,但我只是为返回的数字提供了一个大的负数。这两行到底发生了什么?不幸的是,我甚至不知道具体该说什么。我知道_cdecl是什么。
简短的背景:我不得不与我没有。lib文件的DLL接口。我遇到了麻烦,所以我做了一个DLL与MS教程在http://msdn.microsoft.com/en-us/library/ms235636.aspx和引用DLL与上面的代码,这是从另一个MS教程,如果我记得正确。
如能帮助我理解这些基本概念,我将不胜感激。谢谢你!typedef int(__cdecl *MYPROC)(LPWSTR);
引入了函数指针的类型定义,换句话说就是:
"MYPROC是一个指针,指向一个接受LPWSTR值并返回int值的函数"。所以你的假设是正确的。您的逻辑也是正确的,因为您希望按照以下行执行操作:
typedef double(__cdecl *MYPROC)(double, double);
....
MYPROC pMyFun = (MYPROC)GetProcAddress(hinstLib, "?Add@MyMathFuncs@MathFuncs@@SANNN@Z");
....
pMyFun(1.0,2.0);
这是在第一行引入一个新的类型。然后声明一个这种类型的变量,然后为它分配感兴趣的函数的地址,最后,使用这个指针调用函数。如果您是函数指针的新手,本教程可能会有所帮助
鉴于此,我有两个问题:
(1)你从哪里得到这个函数的名字?(2) TestDll.dll是你写的那个,还是你需要接口的那个?
- Visual c ++,使用字符串引用/指针调用 dll 函数
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 调用 "project" 函数和调用 DLL 函数之间的区别
- 代码在 msvcrt .dll函数上设置断点失败
- VB.NET DLL中的C++DLL函数复制
- 在python-ctypes中声明变量并传递给dll函数
- 从 Python 调用 Windows DLL 函数时出错
- 调用 dll 函数时"Run-Time Check Failure #0 - The value of ESP"
- 列出 C# 中的 non-.NET DLL 函数
- 基本 DLL 函数
- 如何在不可修改的源代码中使用 DLL 函数?
- 对需要双精度数组和结构作为输入C++ DLL 函数的 C# 调用
- WScript.CreateObject 在调用 C++ COM dll 函数时返回空
- 如何在 lua cpp 模块中调用托管 c++ dll 函数
- 测试C++ DLL 函数
- 从 C# GUI 将 char * 参数传递给C++ dll 函数
- 使用指针调用C++ DLL 函数
- 在C++中导入 DLL 函数
- #VALUE!在 64 位 Excel 中调用 DLL 函数 (C++) 时
- 如何从 UWP 应用调用"libheif.dll"函数