gpt4 book ai didi

c++ - 当我运行这段代码时它是 "stopped working"。我想从 API 调用这个简单的函数

转载 作者:行者123 更新时间:2023-11-28 07:08:09 24 4
gpt4 key购买 nike

我只想从 API 调用函数。 WhozCraig 刚刚告诉我,我的只是一个类型,而不是一个函数。但我仍然不知道如何解决这个问题。我应该如何声明它而不仅仅是 typedef?对不起,我是菜鸟。感谢您的帮助!

#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 .

关于c++ - 当我运行这段代码时它是 "stopped working"。我想从 API 调用这个简单的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21450006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com