当我运行此代码时,它"stopped working"。我希望从 API 调用这个简单的函数

It "stopped working" when i run this code. I wish to call this simple function from the API

本文关键字:API 我希望 调用 函数 简单 working 运行 代码 stopped      更新时间:2023-10-16

我只想从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