将回调函数传递给C库会引发访问冲突

时间:2018-07-26 15:18:55

标签: c++

首先,我是一名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所定义的代码文件中的所有操作。因此,我上面发布的功能不是类的方法。

0 个答案:

没有答案