Visual c++ 0xC0000005:访问冲突写入位置0x00000000
我在构建调试项目时遇到了一个奇怪的问题。我在网上搜索过,但不幸的是我还没有找到任何线索 我正在尝试在控制台应用程序项目中加载dll。我的dll有几个函数,我只想调用FUNC1来检查这个函数是否正常工作 我的dl中FUNC1的声明是:Visual c++ 0xC0000005:访问冲突写入位置0x00000000,visual-c++,access-violation,loadlibrary,Visual C++,Access Violation,Loadlibrary,我在构建调试项目时遇到了一个奇怪的问题。我在网上搜索过,但不幸的是我还没有找到任何线索 我正在尝试在控制台应用程序项目中加载dll。我的dll有几个函数,我只想调用FUNC1来检查这个函数是否正常工作 我的dl中FUNC1的声明是: int FUNC1 (char *inVal, int *retVal) 我已在控制台应用程序中成功加载dll,并使用函数指针调用FUNC1,如下所示: int main() { HINSTANCE testInstance; testInstance = L
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());
}
}如何使用指针?传递给它的
int*
可能不是空的
尝试以下操作(使用实际的整数类型-而不是指针-并获取其地址):
您是否使用相同的调用代码测试它,但不使用LoadLibrary?(即使用函数直接链接到对象文件)还没有,我会检查它并让您保留informed@AntonKovalenko:我检查了它,没有loadlibrary它工作正常!FUNC1获取char*PIN输入并将一个整数返回int*retVal,如您所述,我更改了调用函数,但遇到了错误:函数调用中未正确保存ESP的值。这通常是调用使用一个调用约定声明的函数以及使用另一个调用约定声明的函数指针的结果。
int ret = 0;
char *PIN = NULL;
PIN = "test";
int retVal1 = FUNC1Lnk( PIN, &ret );