gpt4 book ai didi

c++ - MotorBee dll 和 c++,内存访问冲突

转载 作者:行者123 更新时间:2023-11-28 03:19:23 26 4
gpt4 key购买 nike

我正在尝试使用 C++ 控制 MotorBee,问题是我正在使用 MotorBee“mtb.dll”附带的 dll 文件

我正在尝试将函数从 dll 加载到我的 C++ 程序中,如下所示:

#include "stdafx.h"
#include <iostream>
#include "mt.h"
#include "windows.h"
using namespace std;

HINSTANCE BeeHandle= LoadLibrary((LPCWSTR) "mtb.dll");
Type_InitMotoBee InitMotoBee;
Type_SetMotors SetMotors;
Type_Digital_IO Digital_IO;

int main() {
InitMotoBee = (Type_InitMotoBee)GetProcAddress( BeeHandle, " InitMotoBee");
SetMotors =(Type_SetMotors)GetProcAddress(BeeHandle, " SetMotors");
Digital_IO =(Type_Digital_IO)GetProcAddress(BeeHandle, " Digital_IO "); InitMotoBee();
SetMotors(0, 50, 0, 0, 0, 0, 0, 0, 0);
system("pause");
return 0;
}

我收到一条错误消息,提示我正在尝试读取内存中的地址 0x00000000,当我尝试 cout BeeHandle 时它显示 0x0 地址(试图检查句柄值)示例错误:

First-chance exception at 0x00000000 in 111111.exe: 0xC0000005: Access violation reading location 0x00000000.
First-chance exception at 0x6148f2b4 in 111111.exe: 0xC0000005: Access violation reading location 0x00000000.
First-chance exception at 0x6148f2b4 in 111111.exe: 0xC0000005: Access violation reading location 0x00000000.
First-chance exception at 0x6148f2b4 in 111111.exe: 0xC0000005: Access violation reading location 0x00000000.
First-chance exception at 0x6148f2b4 in 111111.exe: 0xC0000005: Access violation reading location 0x00000000.

谢谢你的帮助,

最佳答案

此转换不正确:

HINSTANCE BeeHandle= LoadLibrary((LPCWSTR) "mtb.dll");

因为它将字符串文字转换为宽字符串文字。只需使用宽字符串文字:

HINSTANCE BeeHandle = LoadLibrary(L"mtb.dll");
  • 检查 LoadLibrary() 的结果:
  • 在尝试使用返回的函数指针之前检查 GetProcAddress() 的结果。每个字符串文字中都有一个前导空格(还有一个尾随空格,感谢评论中的罗杰)用于指定函数名称,删除它们。
  • 如果 LoadLibrary()GetProcAddress() 失败,请使用 GetLastError()获取失败的原因。

代码摘要:

HINSTANCE BeeHandle = LoadLibrary(L"mtb.dll");
if (BeeHandle)
{
SetMotors = (Type_SetMotors)GetProcAddress(BeeHandle, "SetMotors");
if (SetMotors)
{
// Use 'SetMotors'.
}
else
{
std::cerr << "Failed to locate SetMotors(): " << GetLastError() << "\n";
}
FreeLibrary(BeeHandle);
}
else
{
std::cerr << "Failed to load mtb.dll: " << GetLastError() << "\n";
}

关于c++ - MotorBee dll 和 c++,内存访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15902577/

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