Подключение dll, написанной на C++ к проекту - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Столкнулся с такой проблемой: не могу подключить написанную на C++ dll-ку к проекту на шарпе. Описание функции (нашел в header файле)
#pragma once
 
#ifdef LINGMATLAB_EXPORTS
#define LINGMATLAB_API __declspec(dllexport)
#else
#define LINGMATLAB_API __declspec(dllimport)
#endif
 
/// Построение метаинформации по тексту и получение словарей и векторов с данными
LINGMATLAB_API bool GetMetainfo(const std::wstring& text, 
                                std::vector<std::wstring>& featuresdict,
                                std::vector<int>& featuresstat,
                                std::vector<std::wstring>& normdict,
                                std::vector<std::vector<int> >& normpos,
                                std::vector<int>& norminds, 
                                std::vector<std::wstring>& sourcedict,
                                std::vector<std::vector<int> >& sourcepos,
                                std::vector<int>& sourceinds,   
                                std::vector<std::vector<int> >& descriptorpos);
Код на шарпе:
namespace test
{
    class Dll 
    {
        [DllImport("LingLibrary.Matlab64.dll")]
        public static extern bool GetMetainfo(
            [MarshalAs(UnmanagedType.BStr)]string text,
            [MarshalAs(UnmanagedType.SafeArray)]out string[] featuredict,
            [MarshalAs(UnmanagedType.SafeArray)]out int[] featurestat,
            [MarshalAs(UnmanagedType.SafeArray)]out string[] normdict,
            [MarshalAs(UnmanagedType.SafeArray)]out int[,] normpos,
            [MarshalAs(UnmanagedType.SafeArray)]out int[] norminds,
            [MarshalAs(UnmanagedType.SafeArray)]out string[] sourcedict,
            [MarshalAs(UnmanagedType.SafeArray)]out int[,] sourcepos,
            [MarshalAs(UnmanagedType.SafeArray)]out int[] sourseinds,
            [MarshalAs(UnmanagedType.SafeArray)]out int[,] descriptorpos);
    }
    class Program
    {
        static void Main(string[] args)
        {
            string[] featuredict;
            int[] featurestat;
            string[] normdict;
            int[,] normpos;
            int[] norminds;
            string[] sourcedict;
            int[,] sourcepos;
            int[] sourseinds;
            int[,] descriptorpos;
            Dll.GetMetainfo("Предложение из четырёх слов.", 
                out featuredict, 
                out featurestat, 
                out normdict, 
                out normpos, 
                out norminds, 
                out sourcedict, 
                out sourcepos, 
                out sourseinds, 
                out descriptorpos);
        }
    }
}
Вылазит ошибка: Не удается загрузить DLL "C:\Users\Жека\Documents\Visual Studio 2008\Projects\test\test\bin\Debug\LingLibrary.Matlab64.dll": Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E) Хотя dll-ка там точно есть и функция в ней такая есть. Пробовал прописывать полный путь к ней и без полного пути, кидал в system32 и регал, ничего не помогает. Преподаватель сказал, что она точно должна запускаться на шарпе. Исходников у меня нет, но он уверяет, что там всё в порядке и всякие dllexport прописаны. Библиотека по идее реализует некий морфологический анализ текста. Я что-то делаю не так, да?

Решение задачи: «Подключение dll, написанной на C++ к проекту»

textual
Листинг программы
[DllImport(@"LingLibrary.Matlab64.dll", EntryPoint = "GetMetainfo", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы