Нельзя добавить ссылку на собственную (неуправляемую) DLL в проекте C # или VB.NET. Это просто не поддерживается. Ссылки работают только для других управляемых библиотек DLL (т. Е. Тех, которые вы можете написать в C # или VB.NET или даже C ++ / CLI).
Однако, вы можете по-прежнему использовать код в этой DLL. Хитрость заключается в том, чтобы вызывать функции, которые он предоставляет динамически во время выполнения, с использованием того же синтаксиса P / Invoke, который используется для вызова функций из Win32 API.
Например, предположим, что у вас есть следующий код, скомпилированный в DLL с использованием C ++:
extern "C" {
__declspec(dllexport) void AddNumbers(int a, int b, int* result)
{
*result = (a + b);
}
}
Теперь, предположив, что вы скомпилировали эту DLL в файл с именем test.dll
, вы можете вызвать эту функцию, добавив следующий код в ваше приложение C #:
[DllImport("test.dll"), CallingConvention=CallingConvention.Cdecl)]
private static extern void AddNumbers(int a, int b, out int result);
public int AddNumbers_Wrapper(int a, int b)
{
int result;
AddNumbers(a, b, out result);
return result;
}
Или в VB.NET, поскольку вы, очевидно, используете это (несмотря на все указания в вопросе):
<DllImport("test.dll", CallingConvention:=CallingConvention.Cdecl)> _
Public Shared Function AddNumbers(ByVal a As Integer, ByVal b As Integer, _
ByRef result As Integer)
End Function
Public Function AddNumbers_Wrapper(ByVal a As Integer, _
ByVal b As Integer) As Integer
Dim result As Integer
AddNumbers(a, b, result)
Return result
End Function
Убедитесь, что вы правильно установили поле CallingConvention
атрибута DllImport
, в зависимости от соглашения о вызовах вашего неуправляемого метода.
Вот более подробное руководство о том, как начать работу с P / Invoke на сайте Microsoft.