Я хочу связать неуправляемую библиотеку C++ с приложением C#. Я использую процесс PInvoke, потому что неуправляемая dll C++ имеет несколько зависимостей, которые не будут компилироваться с CLR. Когда я компилирую приведенный ниже пример кода, я получаю следующие ошибки. Я нашел ссылку, которую мне нужно добавить ссылку dll, но MSVS говорит мне, что не может ее добавить. Я также читал о регистрации его с помощью regsvr32, но это похоже на библиотеки CLR, так? Итак, мой вопрос: как мне очистить эту ошибку для неуправляемой dll?Как определить неуправляемую зависимость dll в C#
ServerTerminal.cs(62,48): error CS1031: Type expected
ServerTerminal.cs(62,48): error CS1519: Invalid token ';' in class, struct, or interface member declaration
ServerTerminal.cs(64,48): error CS1031: Type expected
ServerTerminal.cs(64,48): error CS1519: Invalid token ';' in class, struct, or interface member declaration
ServerTerminal.cs:
class ServerTerminal
{
private delegate int Callback(string text);
private Callback mInstance;
public ServerTerminal()
{
mInstance = new Callback(Handler);
SetCallback(mInstance);
}
public void Test()
{
TestCallback();
}
private int Handler(string text)
{
return 0;
}
[DllImport(@"..\\lib\\DDS_Service.dll", EntryPoint="SetCallback")];
private static extern void SetCallback(Callback fn);
[DllImport(@"..\\lib\\DDS_Service.dll", EntryPoint="TestCallback")];
private static extern void TestCallback();
}
и C++ DLL в Component.h:
typedef int (__stdcall * Callback)(const char* text);
Callback Handler=0;
class COM_Component : public CM_Component
{
// Contents not pasted
}
и C++ DLL в Component.cpp:
extern "C" __declspec(dllexport)
void __stdcall SetCallback(Callback handler)
{
Handler = handler;
}
extern "C" __declspec(dllexport)
void __stdcall TestCallback()
{
int retval = Handler("hello world");
}
COM_Component::COM_Component(void) : CM_Component(TDstring("COM_Component"))
{
// register the observer callback methods
}
// Remainder of file not pasted
В частности, ошибка, которую я получаю при попытке сопоставить ссылку на DLL с проектом C#: «Ссылка на dll не может быть добавлена. Убедитесь, что файл доступен, и что это действительная сборка или COM ". –
Удалите точку с запятой после атрибута – erikkallen