Моя цель — заполнить открытый массив с помощью C ++. Этап выглядит следующим образом.
1. SV: определить размер распакованного массива и отправить его через открытый массив в функции импорта.
2. C ++: заполнить открытый массив.
3. SV: использовать массив.
Для распакованного массива нет проблем. Но в реальной ситуации размер массива часто меняется, и скомпилированная функция C ++ должна каждый раз перекомпилироваться. Чтобы избежать этой ситуации, мне нужно использовать открытый массив, чтобы функция C проверяла размер и соответственно заполняла данные.
Далее источники упрощены, показывая только основные части. Функция импорта svcpp вызывается в SV и выполняется на C ++. Аргументами являются открытый массив i [], чей дескриптор h на стороне C ++. Когда я компилирую исходный код C ++, возникает ошибка,
msgstr «ошибка 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.
}
Вы можете попробовать это, чтобы компилятор C ++ не исказил имя вашей функции.
extern "C" void svcpp(const svOpenArrayHandle h) {
...
}