Используйте NetCDF4-C в Unity

Это мой первый пост (после долгих лет).

Проект, которым я буду заниматься, — это использование файлов NetCDF4 (.nc) в Unity на Windows. Я буду использовать Unity 5.4.0f3 и Windows 10, и я разрабатывал в Unity раньше и знаком с C # и JavaScript, но NetCDF имеет только API C, Java и Fortran, хотя есть обертки в Python, C ++ и других. (источник: https://www.unidata.ucar.edu/publications/factsheets/current/factsheet_netcdf.pdf).

Так что мой конкретный вопрос как вызвать функции NetCDF4-C (nc_get_vara_float (), nc_open и т. д.) в C # для использования в Unity?

Что я пробовал до сих пор:

Вначале я специально гуглил учебники / попытки по NetCDF4-C + Unity, но ничего не нашел, поэтому вместо этого я искал совместимость вызова функций C из C #. В настоящее время я работаю над проектом для Linux с NetCDF4-C и написал пользовательские функции-оболочки для функций netcdf.h, поэтому я надеялся, что смогу повторно использовать свой код там.

Я попытался подписаться на этот ТАК пост (Можно ли вызвать функцию C из C # .Net) но при попытке воспроизведения выдается ошибка в Unity: «DllNotFoundException: test.so» (мой файл назывался «test.c»). Судя по комментариям, Linux использует .so файлы, но Windows использует .dll, и я не был уверен, как сгенерировать .dll из файла C.

Я посмотрел еще один пост на этом (Как написать файл DLL в C?) и скачал Visual Studio, чтобы следовать. Пока VS скачивал, я посмотрел, как использовать GCC для компиляции (Создание DLL в GCC или Cygwin?), и использовал подсистему Bash (терминал «Bash на Ubuntu в Windows»), но получил несколько ошибок, которые указывали на то, что код из предыдущей ссылки (2-я ссылка SO в этом посте) был для C ++, поэтому я перестал работать с GCC.

Как только VS закончил установку, я вернулся к попытке использовать VS для создания .dll и попытался объединить решения из обеих публикаций SO (1 и 2), чтобы я мог использовать DLL-файл, содержащий код C в Единство, но безрезультатно: я получаю ту же ошибку, но только с другим расширением (и с другим именем): «DllNotFoundException: Win32Project1.dll».

У меня есть следующий код:

test.cs (используется в Unity и присоединяется к компоненту):

using UnityEngine;
using System.Collections;

using System.Runtime.InteropServices;

public class test : MonoBehaviour {

[DllImport("Win32Project1.dll", EntryPoint="DisplayHelloFromMyDLL")]

public static extern void DisplayHelloFromMyDLL ();

// Use this for initialization
void Start () {
DisplayHelloFromMyDLL();
}

// Update is called once per frame
void Update () {

}
}

Win32Project1.dll (создан и встроен в Visual Studio):

#include <stdio.h>
extern "C"{
__declspec(dllexport) void DisplayHelloFromMyDLL()
{
printf("Hello DLL.\n");
}
}

0

Решение

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

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

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

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