我的目标是用C ++填充一个开放数组。阶段如下。 1. SV:定义一个大小的解压缩数组,并通过导入函数中的开放数组发送它。 2. C ++:填充打开的数组。 3. SV:使用数组。
对于大小的解压缩阵列,没有问题。但在实际情况下,数组大小经常更改,并且每次都必须重新编译已编译的C ++函数。为了避免这种情况,我需要使用一个开放数组,以便C函数检查大小并相应地填充数据。
在下文中,简化了源,仅显示了基本部分。导入函数svcpp在SV调用并在C ++中执行。参数是open数组i [],其句柄是C ++方面的h。当我编译C ++源代码时,会发生错误, "错误LNK1120:未解析的外部"。
有什么问题?
SV方面:
module
import "DPI-C" context function void svcpp (inout byte unsigned i[]);
byte myarray[2];
initial
svcpp(myarray);
endmodule
C ++方面:
#include "svdpi.h"
#include "dpiheader.h"// This includes the data structure for the open array
void svcpp(const svOpenArrayHandle h){
//*(uchar *) x = *(uchar *) svGetArrElemPtr(h,0);
*(uchar *) svGetArrElemPtr(h,1) = 10; //I really want this operation.
}
答案 0 :(得分:1)
您可以尝试这样做以避免C ++编译器破坏您的函数名称。
extern "C" void svcpp(const svOpenArrayHandle h) {
...
}