我的程序不想在 DLL 调用后写入文本文件

My program doesn't want to write in a text file after DLL call

我有一个公开函数的 DLL :

extern "C" __declspec( dllimport ) __stdcall int EP_ProtectedStringByKey( char* Key, char* Left, int Len);

C++ 文件的头部:

typedef int (*GetString)(const char *Key, const char *Str, int Len);

使用此代码,一切正常。程序在“example.txt”中写了它应该写的内容。

GetString _GetSTR;
int longueur;
string my_string;
const char *pmy_string; 
HINSTANCE hInstLibrary = LoadLibrary("my.dll");
_GetSTR = (GetString)GetProcAddress(hInstLibrary, "EP_ProtectedStringByKey");
ofstream myfile("example.txt");
longueur = _GetSTR("key_421", NULL, 0);
cout << "Taille : " << longueur << endl;
myfile << "Size : " << longueur << endl;
my_string.resize(longueur); // resizing the string
pmy_string = my_string.c_str(); // Pointer to pmy_string


// ---- _GetSTR("key_421", pmy_string, longueur); ---- 

myfile << "Another line.\n";
myfile.close();
FreeLibrary(hInstLibrary);

现在,如果我添加这行代码:

_GetSTR("key_421", pmy_string, longueur);

我的数据很好地打印在屏幕上:

cout << "Data : " << pmy_string << endl;

但是 NOTHING 不再写入文件 "example.txt("Another line" 不再写入). 就像在 my_string 变量填满后,我的程序拒绝写入文件。但奇怪的是它显示了 pmy_string 的内容 在屏幕上。

我想我做错了什么,但我不知道是什么...

感谢您的帮助,

为了避免两个未定义的行为,我需要:

  1. 更改 typedef 以精确调用约定

typedef int (*GetString)(const char *Key, const char *Str, int Len);

typedef int (__stdcall *GetString)(const char *Key, const char *Str, int Len);
  1. Dpn 不使用 std::string::c_str() 因为在 CPP-Reference "Writing to the character array accessed through c_str() is undefined behavior."

pmy_string = my_string.c_str(); // Pointer to pmy_string

pmy_string = my_string.data(); // Pointer to pmy_string