Как упорядочить массивы внутри структуры в нативную DLL

Я пытаюсь обернуть нативную C ++ dll в dll ядра .Net.

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

struct param {
int i;
double d;
double array[3];
};

extern "C" _declspec(dllexport) double GetSecondValue(param* p);

double GetSecondValue(param* p)
{
return p->array[1];
}

В F # у меня есть соответствующая (?) Структура

module Structures

open System.Runtime.InteropServices
[<StructLayout(LayoutKind.Sequential)>]
type Par =
struct
val mutable i : int
val mutable d : float
[<MarshalAs(UnmanagedType.ByValArray, SizeConst=3)>]
val mutable da : float[]
end

а затем простая программа для тестирования

open System
open System.Runtime.InteropServices
open Structures

[<DllImport("Dll1")>]
extern double GetSecondValue(Par & p);[<EntryPoint>]
let main argv =
let mutable p = new Par()
p.d <- 1.0
p.i <- 5
p.da <- [|3.0;7.0;9.0|]
let result = GetSecondValue(&p)
Console.WriteLine(result)
0 // return an integer exit code

Одиночные двойные и целочисленные значения проходят нормально, но массив выглядит так, как будто указатель испортился
введите описание изображения здесь

Я подозреваю, что мой маршалинг неверен. Может ли кто-нибудь предложить какой-либо совет (или даже лучше хороший пример) о том, как это должно быть сделано.

2

Решение

Задача ещё не решена.

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector