Мой друг, Аватар прав, вы должны вызывать неуправляемые функции dll с помощью следующего кода:
namespace SDK_DLL_NS
{
internal class SDK_DLL
{
[DllImport("../../../SDK/SDK.dll")]
public static extern unsafe int SDK_AMethod(int devHandle, IntPtr buf, int length);
public const int MAX_LEN = 12345;
.....
}
}
Теперь, это только часть взаимодействия, память виртуальной машины .NET по определению не является фиксированной, и это то, что ожидает dll, к счастью, у нас есть пространства имен System.Runtime.InteropServices для помощи с его структурой GCHandle который обеспечивает способ доступа к управляемому объекту из неуправляемого кода. Поэтому я думаю, что код может быть примерно таким, нам нужно выделить немного памяти "а-ля нативный код":
SDKdllBuffer = new byte[SDK_DLL.MAX_LEN];
pinnedBuffer = GCHandle.Alloc(SDKdllBuffer, GCHandleType.Pinned);
unsafe
{
SDK_DLL.SDK_AMethod(handle, pinnedBuffer.AddrOfPinnedObject(),MAX_LEN);
}
Надеюсь, это даст вам представление. Удачи.
Juan