0

我认为这是一个微不足道的问题,但我永远无法让它发挥作用!

我通过 .lib 内的函数指针进行了函数调用,并将 .lib 附加到在库外部设置函数指针的应用程序。以下是代码片段

库:

void (*PopulateBuffer)(byte *NALBuffer,unsigned int *readbytes); // The Declaration

PopulateBuffer(NALBuffer,&readbytes); // The function Call

应用 :

extern void (*PopulateBuffer)(char *NALBuffer,unsigned int *readbytes);


void UpdateNALBuff(char *Buffer,unsigned int *readbytes)

{

    //Buffer content is updated
    //readbytes is updated

}

main()

{

    PopulateBuffer= &UpdateNALBuff;

        LibMain(); // this is the main call in which the function pointer is called
}

我这样做对吗???因为当函数调用在库中接近时,它会抛出以下错误:

DecoderTestApp.exe 中 0x00536e88 处的未处理异常:0xC0000005:访问冲突读取位置 0x7ffef045。

4

3 回答 3

0

看起来没问题,但是我怀疑您读入的缓冲区太小,这就是您遇到访问冲突的原因。

void UpdateNALBuff(char *Buffer,unsigned int *readbytes)
{
   //put values in Buffer but no more than *readbytes passed in,
   //finally update *readbytes with actual number of bytes read.
}
于 2012-08-14T11:23:23.627 回答
0

一般为了处理函数指针,你可以通过以下方式进行:

typedef void (*PopulateBuffer)(byte *NALBuffer,unsigned int *readbytes); //This should be exposed from the library

在库中创建一个指针变量,用于存储函数指针

PopulateBuffer PpBuffFunc = NULL;

从库中提供一个函数来设置函数

void setPopulateBufferFuncPointer(PopulateBuffer func)
{
    PpBuffFunc = func;
}

现在从您的应用程序中调用此函数

setPopulateBufferFuncPointer(UpdateNALBuff);

在适当位置的库内,PpBuffFunc通过传递适当的参数来调用

于 2012-08-14T11:41:17.823 回答
0

知道了!:)

问题是,我在另一个文件中调用函数指针而没有提供相同的原型,

因此它将“返回类型”作为 INT,并且由于该函数的返回类型为 void,因此引发了错误!..这是一个愚蠢的错误!谢谢大家!:)

于 2012-08-14T13:15:10.820 回答