当我运行此代码时,它"stopped working"。我希望从 API 调用这个简单的函数
It "stopped working" when i run this code. I wish to call this simple function from the API
我只想从API调用该功能。Whozcraig刚刚告诉我,我的只是一种类型,而不是一种功能。但是我仍然不知道如何解决这个问题。我应该如何声明这一点而不是键入?抱歉,我是菜鸟。感谢您的帮助!
#include <Windows.h>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include "ftrScanAPI.h"
typedef FTR_API_PREFIX FTRHANDLE (FTR_API *MyftrScanOpenDevice)();
MyftrScanOpenDevice NowftrScanOpenDevice;
void main()
{
FTRHANDLE hDevice=NULL;
PVOID pBuffer;
FTRSCAN_IMAGE_SIZE ImageSize;
hDevice=LoadLibrary("ftrScanAPI.dll");
if(hDevice==NULL)
{ printf("Failed to detect ScanAPI.dll");
getch();
exit(EXIT_FAILURE);
}
hDevice = NowftrScanOpenDevice();
}
这是来自API的片段:
FTR_API_PREFIX FTRHANDLE FTR_API ftrScanOpenDevice();
变量NowftrScanOpenDevice
是函数的指针,由于它是全局变量,因此零定位化。通过调用它,您实际上是在删除NULL
指针,该指针是未定义的行为并导致崩溃。
您需要使用GetProcAddress
获取该功能的实际地址,然后将其分配给NowftrScanOpenDevice
:
...
HMODULE hLibrary = LoadLibrary(...);
NowftrScanOpenDevice = (MyftrScanOpenDevice) GetProcAddress(hLibrary,
"ftrScanOpenDevice");
hDevice = NowftrScanOpenDevice();
...
注意:我为LoadLibrary
返回的句柄添加了一个新的变量hLibrary
。您需要稍后致电FreeLibrary
。
相关文章:
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 我希望定义两个具有相同代码的不同名称的库
- 我希望改进或要求我目前的延迟/睡眠方法。C++
- 视觉我希望一个函数在另一个函数C++中进行计算
- 当我希望 1 时,c ++ int 会变为大约 4198321
- 精灵不显示我希望它们显示的方式
- 告诉编译器我希望变量始终存储在寄存器中的正确方法是什么
- 我希望通过使用模板元编程从变量ARGS中进行剥离参数
- 我希望在字符串功能上提供一些帮助
- 在Mac OSX中,文本的大小比使用Qt的Windows小。我希望到处都有相同的尺寸
- 我希望循环运行直到数字为:123
- 我希望QT-App看起来像QT-App,而不是Android-native
- 无法使我的getChar()函数能够工作,我希望它能正常工作,输出IS10而不是2 C
- 制作主机游戏.我希望游戏在他们获得 0 点生命值时结束
- 例外情况下,我希望在没有任何堆栈展开的情况下进行调试
- 当我运行此代码时,它"stopped working"。我希望从 API 调用这个简单的函数
- 操作员过载.q = q1+q2,q1 正在修改,但我希望 q1 和 q2 完好无损
- 我希望 cin 读取直到'n'但我无法使用 getline
- 若语句不起作用,我希望它能起作用
- 如果我希望子类向父类添加功能,我是否应该保护我的属性