首先,我是一名C#开发人员,从事的项目是我的工作,我感到非常不舒服。
话虽如此,我目前正在尝试将2个回调函数传递给C
库。我在C++
控制台应用程序中将这些函数定义为自由函数。
当我运行应用程序时,在尝试将函数传递给库时,收到以下极其无助的错误。
YourApp.exe中在0x0000000000000000处引发的异常:0xC0000005:执行访问位置0x0000000000000000的访问冲突
回调是在我下面列出的随附C
源文件的头文件中定义的。请注意,我没有编写以下标头。
header.h
typedef void( __stdcall * Callback1 )( void *, int, unsigned int, int, int, int, int );
typedef void( __stdcall * Callback2 )( void *, int, int, unsigned int, unsigned int );
__declspec(dllimport) int open( Callback1 cb1, Callback2 cb2 );
首先从C++
控制台应用程序中,include
标头C
。
extern "C"
{
#include "header.h"
}
然后,我声明要作为参数传递给通过open
文件公开的header.h
函数的2个自由函数。
void __stdcall callback1(
void *data,
int count,
unsigned int colorId,
int flag,
int pageNumber,
int width,
int height )
{
if ( count <= 0 ) return;
std::cout << "callback1" << std::endl;
}
void __stdcall callback2(
void *data,
int count,
int offset,
unsigned int colorId,
unsigned int side )
{
if ( count <= 0 ) return;
std::cout << "callback2" << std::endl;
}
然后在main中尝试将上述函数作为参数传递给open
函数。
int main( int argc, char *argv[ ], char *envp[ ] )
{
// This is the line where the error is thrown.
open( callback1, callback2 );
}
我当前正在使用VS2015。我不确定该如何处理,因为我发现该错误极其无用。
我目前正在执行main
所定义的代码文件中的所有操作。因此,我上面发布的功能不是类的方法。