Я использую VS2012 и пытаюсь вызвать функцию в проекте C# из C DLL, которую я написал. C DLL вызывается внешним приложением (Thunderbird).Вызов C# DLL с C; связанные проблемы
Я нашел страницу Unmanaged Exports и выполнил инструкции. В процессе мой проект C# должен был быть установлен на .net4 и x86, чтобы получить все, чтобы скомпилировать и связать, насколько это возможно. Но у меня ошибка компоновщика, которую я не могу решить, и поскольку для меня это неизведанная территория, возможно, я просто делаю что-то глупое.
В моем C# у меня есть;
using RGiesecke.DllExport;
namespace StreamAttacher
{
class Test
{
[DllExport("add", CallingConvention = CallingConvention.Cdecl)]
public static int TestExport(int left, int right)
{
return left + right;
}
}
}
И в моей C У меня есть
#include<stdio.h>
int add(int left, int right); //in c#
__declspec(dllexport)char* strTest2()
{
int i = add(2,3);
char *p = "C:\\Work\\Mozilla\\Test dir\\testfile.zip";
return p;
}
Проект C# ссылается на проект C в его внешних зависимостей.
На здании, я получаю ошибку «линкер LNK2019 ошибки: неразрешенный внешний символ _ADD ссылки в функции _strTest2»
Если я смотрю на C# DLL, используя DllExp то я не вижу ничего экспортировали. Нужно ли мне? Я ожидал увидеть функцию «добавить», но ее там нет, и никаких ошибок не возникает, когда я создаю C# DLL самостоятельно.
Кроме того, это то, что proto для 'add' в коде C все, что мне нужно, если что-то работает дальше дальше по цепочке?
Вам нужна библиотека импорта для DLL, чтобы сохранить компоновщик счастливым. У вас его нет, и вы не можете получить его от этой утилиты. Запись файла .def и преобразование его в библиотеку импорта технически возможна, хотя и очень подвержена ошибкам. Это просто не очень практично для реальных приложений. Используйте [неуправляемый способ] (http://stackoverflow.com/a/2082212/17034). –