繁体   English   中英

c ++,使用字符串引用/指针调用dll函数

[英]c++, Call dll function with string reference/pointer

我有一个包含两个项目的解决方案,一个 DLL 和一个控制台应用程序。 控制台应用程序是调用和测试 DLL 中的函数的客户端。

对于第一个函数greetings ,我遇到了一个问题。 我应该提一下,我对 C 和 C++ 完全陌生。

DLL 项目(称为插件)如下所示:

插件.h

#include "types.h" // which contains S32 and #include<string>
#define EXPORT extern "C" __declspec (dllexport)
EXPORT S32 WINAPI _3Greetings(string *str);

插件.cpp

#include "plugin.h"
S32 __stdcall _3Greetings(string *str)
{
    *str = "Hello From Plugin!";
    return -1;
}

所有 DLL 函数都应在成功时返回-1或在失败时返回[1-255] 此外,该项目有plugin.def来解决__stdcall调用约定的名称修饰。

控制台应用程序如下所示:

typedef U32(*GetGreetings)(string);    
HMODULE DllHandler = ::LoadLibrary(L"plugin.dll");
        if (DllHandler != NULL) {
            string greetingText;
            GetGreetings greetings = reinterpret_cast<GetGreetings>(GetProcAddress(DllHandler2, "_3Greetings"));
            greetings(&greetingText); // THE PROBLEM HERE
            cout << greetings << endl;
        }

问题是如果我将&添加到greetingText ,我会收到一个错误:

E0415 没有合适的构造函数可以将“std::string *”转换为“std::basic_string, std::allocator>”

并且:

C2664“U32 (std::string)”:无法将参数 1 从“std::string *”转换为“std::string”

如果我不放& ,我会得到一个运行时异常:

在 ConsoleApp.exe 中的 0x0FA65A72 (plugin.dll) 处抛出异常:0xC0000005:访问冲突写入位置 0xCCCCCC00。

GetGreeting 的 typedef 是错误的,它错过了一个 *

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM