c++,用字符串 reference/pointer 调用 dll 函数

c++, Call dll function with string reference/pointer

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

对于第一个函数greetings,我遇到了问题。我应该提到我是 C 和 C++ 的新手。

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

plugin.h

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

plugin.cpp

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

所有 DLL 函数应该 return -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 no suitable constructor exists to convert from "std::string *" to "std::basic_string, std::allocator>"

还有:

C2664 'U32 (std::string)': cannot convert argument 1 from 'std::string *' to 'std::string'

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

Exception thrown at 0x0FA65A72 (plugin.dll) in ConsoleApp.exe: 0xC0000005: Access violation writing location 0xCCCCCC00.

GetGreeting 的 typedef 错误,缺少 *