我在构建调试项目时遇到了一个奇怪的问题。我已经在网上搜索过,但不幸的是我还没有找到任何线索。
我正在尝试在我的控制台应用程序项目中加载一个 dll。我的 dll 有几个函数,我只想调用 FUNC1 来检查这个函数是否正常工作。
我的 dl 中 FUNC1 的声明是:
int FUNC1 (char *inVal, int *retVal)
我已经在我的控制台应用程序中成功加载了 dll,并使用函数指针调用了 FUNC1,如下所示:
int main()
{
HINSTANCE testInstance;
testInstance = LoadLibrary("Path\\to\\my.dll");
typedef int (WINAPI *FUNC1Ptr)(char *inVal, int *retVal);
if(testInstance == NULL)
{
printf("The dll is not loaded, Please check the path!\n");
}
else
{
printf("The dll is loaded successfully!!");
}
FUNC1Ptr FUNC1Lnk = (FUNC1Ptr)GetProcAddress(testInstance,"FUNC1");
if (!FUNC1tLnk)
{
FreeLibrary(testInstance);
printf("Error in getting function address!!\n");
}
else
{
int *ret = 0;
char *PIN = NULL;
PIN = "test";
int retVal1 = FUNC1Lnk( PIN, ret );
}
return 0;
}
PS。违规被引用到 free.c 文件中:
retval = HeapFree(_crtheap, 0, pBlock);
if (retval == 0)
{
errno = _get_errno_from_oserr(GetLastError());
}
}