Неправильный импорт.Вы можете импортировать его вручную:
[DllImport("<Your COM Dll>")]
private static extern <Return Type> <"Function Name">();
Затем, в вашем основном методе или в методе, где вы инициализируете свой объект DLL, вам нужно:
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr LoadLibrary(string lpFileName);
public MyDll()
{
Environment.CurrentDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string dllPath = Environment.CurrentDirectory + @"<Location of Dll you are importing from>";
LoadLibrary(dllPath);
}
Например, проверитьследующий COM Dll:
GOIO_DLL_INTERFACE_DECL gtype_int32 GoIO_GetNthAvailableDeviceName(
char *pBuf,
gtype_int32 bufSize,
gtype_int32 vendorId,
gtype_int32 productId,
gtype_int32 N);
Я импортировал этот Dll следующим образом:
[DllImport("GoIO_DLL.dll")]
private static extern int GoIO_GetNthAvailableDeviceName(
byte[] pBuf,
int bufSize,
int vendorId,
int productId,
int N);
Как видите, указатель на символ становится байтом [], как вы и пытались.Ключевое слово ref не нужно.