visual Как передать данные между SV и C ++ в двух направлениях через открытый массив с функцией импорта DPI

Моя цель — заполнить открытый массив с помощью 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.
}

5

Решение

Вы можете попробовать это, чтобы компилятор C ++ не исказил имя вашей функции.

extern "C" void svcpp(const svOpenArrayHandle h) {
...
}
1

Другие решения


По вопросам рекламы [email protected]