我的程序不想在 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 的内容 在屏幕上。
我想我做错了什么,但我不知道是什么...
感谢您的帮助,
为了避免两个未定义的行为,我需要:
- 更改 typedef 以精确调用约定
typedef int (*GetString)(const char *Key, const char *Str, int Len);
在
typedef int (__stdcall *GetString)(const char *Key, const char *Str, int Len);
- 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
我有一个公开函数的 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 的内容 在屏幕上。
我想我做错了什么,但我不知道是什么...
感谢您的帮助,
为了避免两个未定义的行为,我需要:
- 更改 typedef 以精确调用约定
typedef int (*GetString)(const char *Key, const char *Str, int Len);
在
typedef int (__stdcall *GetString)(const char *Key, const char *Str, int Len);
- 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