Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: декларация функции Добавлено: 26.11.03 15:49  

Автор вопроса:   Артём Л. | ICQ: 280044491 

в длл написанной на си есть следующаа функция

int Encrypt(

LPCSTR lpszP,

LPSTR lpszEncrypt // result buffer, guaranteed long enough

)

lpszEncrypt must point to a buffer that is at least 8 characters long.

правильно ли я задекларировал и вызвал её:

Public Declare Function Encrypt Lib "CMVISM32.DLL" (ByVal lpszP As String, ByRef lpszEncrypt As String) As Integer

Dim p$ = "3BQ8JB"

Dim en$

Dim i% = Encrypt(p, en)

потомучто при вызове у меня выдет ошибку System.NullReferenceException: Object reference not set to an instance of an object.

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 ZeroX



ICQ: 220401330 

Вопросов: 47
Ответов: 406
 Профиль | | #1 Добавлено: 26.11.03 17:18

Public Declare Function Encrypt Lib "CMVISM32.DLL" (ByVal lpszP As String, ByVal lpszEncrypt As String) As Integer

Попробуй так

Ответить

Номер ответа: 2
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #2
Добавлено: 27.11.03 07:39
С такими тонкостями к сожалению не знаком (редко приходится из .NET
вызывать функции API). Но что-то мне подсказывает, что String здесь
использовать нельзя. Нужно передавать строку виксированной длины. Для
этот нужно переменную объявлять с атрибутом MarshalAsAttribute, что-то
типа:

<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=64)> szFileType as String

Ответить

Номер ответа: 3
Автор ответа:
  Артём Л.



ICQ: 280044491 

Вопросов: 43
Ответов: 227
 Профиль | | #3 Добавлено: 27.11.03 13:27
вот правильная декларация
Public Declare Function Encrypt Lib "CMVISM32.DLL"
(<Runtime.InteropServices.MarshalAs(UnmanagedType.LPStr)> ByVal lpszP As
String, ByVal lpszEncrypt As StringBuilder) As Integer

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам