Подключение dll, написанной на C++ к проекту - C#
Формулировка задачи:
Здравствуйте! Столкнулся с такой проблемой: не могу подключить написанную на C++ dll-ку к проекту на шарпе.
Описание функции (нашел в header файле)
Код на шарпе:
Вылазит ошибка:
Не удается загрузить DLL "C:\Users\Жека\Documents\Visual Studio 2008\Projects\test\test\bin\Debug\LingLibrary.Matlab64.dll": Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E)
Хотя dll-ка там точно есть и функция в ней такая есть. Пробовал прописывать полный путь к ней и без полного пути, кидал в system32 и регал, ничего не помогает. Преподаватель сказал, что она точно должна запускаться на шарпе. Исходников у меня нет, но он уверяет, что там всё в порядке и всякие dllexport прописаны.
Библиотека по идее реализует некий морфологический анализ текста.
Я что-то делаю не так, да?
#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++ к проекту»
textual
Листинг программы
[DllImport(@"LingLibrary.Matlab64.dll", EntryPoint = "GetMetainfo", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]