C # DLLImport 'Сложный' массив в возвращении и параметрах - PullRequest
0 голосов
/ 21 февраля 2011

Я просто пишу небольшую тестовую интеграцию между собственной C ++ DLL с именем fft.dll и консольным приложением C #.

fft.dll содержит один класс с именем Fourier, который содержит одинстатический метод:

#include <complex>
using namespace std;
class Fourier
{
public:
    static complex<double>* fft(complex<double>*);
};

Статический метод fft(...) просто вычисляет БПФ массива complex<double> и возвращает вычисленное БПФ в виде массива complex<double>.

У меня есть двавопросы:

  1. Функция принимает массив complex<double> с, но, насколько мне известно, такой структуры данных в .Net не существует.Как я могу / должен отформатировать свои данные для передачи в функцию fft(...)?
  2. Поскольку статический член находится внутри класса, какой синтаксис мне следует использовать в моем консольном приложении .Net при использовании [DllImport("fft.dll")]?

Спасибо

Редактировать: Следующий вопрос: здесь

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

P / Invoke не поддерживает вызов статических функций класса, а также не поддерживает и не понимает шаблоны C ++.

Как предложил VinayC, напишите в вашей dll C ++ другой метод-обертку, который является глобальным и который собирает данные из простого двойного массива в / из шаблонных массивов, которые использует ваша статическая функция C ++.

1 голос
/ 21 февраля 2011

AFAIK, вы должны экспортировать функцию в мире c / c ++ для .NET, чтобы использовать ее (используя dll-import). Я не уверен, как вы можете отобразить шаблонный класс C ++ в мире .NET - поэтому я хотел бы предложить, чтобы вы могли написать функцию-оболочку в стиле c внутри вашей dll, добавить ее в список экспорта. Функция должна принимать и возвращать массив вспомогательной структуры (аналогично Complex<double>), чтобы можно было отобразить структуру в мире .NET. Ваша функция будет преобразовывать эту структуру в сложный класс и вызывать статическую функцию.

...