【发布时间】:2009-12-19 16:05:13
【问题描述】:
平台:win32,语言:c++
我在调用我声明的导入函数时收到此错误:
运行时检查失败 #0 - ESP 的值未正确保存 通过函数调用。这是 通常是调用函数的结果 用一个调用约定声明 使用声明的函数指针 不同的调用约定。
这是我使用的代码:
int LoadSongFromFile(int module);
typedef int (CALLBACK* loadSongT)(LPCTSTR);
//...
HINSTANCE dllHandle = NULL;
loadSongT loadSongPtr = NULL;
dllHandle = LoadLibrary(L"miniFMOD.dll");
loadSongPtr = (loadSongT)GetProcAddress(dllHandle,"SongLoadFromFile");
int songHandle = loadSongPtr(L"C:\b.xm");
我试图调用的函数是 SongLoadFromFile,它需要一个参数(在 C# 中它是字符串,所以我假设它在 C++ 中是 LPCTSTR)并返回一个 int 值。
谁能检查我做错了什么?
附: songHandle 得到一个奇怪的负值 -858993460
这就是我可以从 C# 调用该函数的方式:
[DllImport("MiniFMOD.dll")] public static extern int SongLoadFromFile(string name);
附: 2 : 使用 *typedef int (__cdecl loadSongT)(char);* 不会返回错误,但 songHandle 显示为 0。
miniFMOD.dll 是一个非托管库
【问题讨论】:
标签: c++ winapi import function