Документы, на которые вы ссылались, показывают:
TM1IMPORT TM1_BOOL TM1API TM1ValBoolGet(TM1U hUser, TM1V vBool );
Возможно ли, что TM1U и TM1V определены как 32-битные типы данных в этом API, и вы выполняете свой код .NET на 64-битной машине, что делает IntPtr 64-битным типом данных? (Если API поставляется с заголовочными файлами C, вы можете увидеть, как определяются эти типы данных). Попробуйте перекомпилировать код .NET в «x86» и попробуйте снова.
Я только что скопировал этот код из вашего комментария выше:
вызов функции ниже:
ibOK = TM1ValBoolGet(hUser, voTemp)
В VB.net: <<< Я полагаю, здесь вы имели в виду VB6 </p>
Declare Function TM1ValBoolGet Lib "tm1api.dll" (ByVal hUser As Long, ByVal vBool As Long) As Integer
В vb.net:
<DllImport(TM1APIDLL)> Public Shared Function TM1ValBoolGet(ByVal hUser As IntPtr, ByVal vBool As IntPtr) As Integer
End Function
Возможно, это опечатка, но этот тип возврата в вашем VB6 отличается от типа в VB.NET. Целое число VB6 - это 16 бит, а целое число в VB.NET - 32 бита.