Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Си++ => VB Добавлено: 16.02.04 17:45  

Автор вопроса:  Scuder | ICQ: 143518458 

Чёртов Си!!! :-(((( Есть dll, написанная на Си. Мне нужно динамически её подключить в VB.. Вот параметры dll:

CHECKERDLL_API int CChecker_SignDocumentA (
    const char * szKeyPath,               - путь к ключам
    const char * szCodePhrase,            - пароль от ключа
    const char * szSecretKeyFile,         - имя файла с закрытым
                                          ключем
    const char * pInputData,              - то, что надо подписать
    int nInputDataSize,                   - длина того, что надо
                                          подписать
    char ** ppOutputData,                 - сюда возвращается буфер с
                                          подписанными данными
    int * pnOutputDataSize                - сюда возвращается длина
                                          получившихся данных
);

 

Вот так нихрена не получается:

Private Declare Function CChecker_SignDocumentA Lib "CheckerDLL.dll" _
    (ByVal szKeyPath As String, ByVal szCodePhrase As String, ByVal szSecretKeyFile As String, _
    ByVal pInputData As String, ByVal nInputDataSize As Integer, ByVal ppOutputData As Any, _
    ByVal pnOutputDataSize As Integer) As Long

 

Private Sub Form_Load()

 

Dim KPath As String
Dim KPass As String
Dim KSecretFileName As String
Dim KInputData As String
Dim KInputDataSize As Integer

 

Dim KOutputData As String
Dim KOutputDataSize As Integer

 

KPath = "C:\...\Keys\"
KPass = "password"
KSecretFileName = "secret.key"
KInputData = "12345678901234567890123456789012345678901234567890"
KInputDataSize = 50


Call CChecker_SignDocumentA(KPath, KPass, KSecretFileName, KInputData, KInputDataSize, KOutputData, KOutputDataSize)


End Sub

 

Вылетает с ошибкой "Инструкция по адресу ... обратилась к памяти по адресу ... Память не может быть written...". И всё. ВБ вылетает.. Думаю, вся проблема в объявлении переменных.. Но понять как их надо объявлять, не могу.. :-(((((

Help!!!

Ответить

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

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



ICQ: 554200 

Вопросов: 101
Ответов: 343
 Профиль | | #1 Добавлено: 16.02.04 18:18

int в Си = 32 бита, Integer в vb = 16 бит... vb надо использовать Long = 32 бита...

Ты .def файл сделал при компилировании dll?

Если нет, то нада другое объявление давать в vb.

Вот такое:

Private Declare Function CChecker_SignDocumentA Lib "CheckerDLL.dll" Alias "_CChecker_SignDocumentA@28"_

(ByVal szKeyPath As String, ByVal szCodePhrase As String, ByVal szSecretKeyFile As String, _

ByVal pInputData As String, ByVal nInputDataSize As Integer, ByVal ppOutputData As Any, _

ByVal pnOutputDataSize As Integer) As Long

Почитай

http://vbnet.ru/forum/show.asp?id=35133

я думаю там ты найдешь ответы на свои вопросы =)

Попробуй...

Могут быть еще ошибки с получением строк из dll...

Если будут - пиши...

Ответить

Номер ответа: 2
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #2
Добавлено: 17.02.04 02:34
А почему у тебя приёмники ByVal? Такие параметры не изменятся, т.к. передаётся их копия.

Ответить

Номер ответа: 3
Автор ответа:
 Scuder



ICQ: 143518458 

Вопросов: 12
Ответов: 37
 Профиль | | #3 Добавлено: 17.02.04 11:26

Chill, не я компилил dll, но .def, в принципе есть.. "_CChecker_SignDocumentA@28" - ничего не меняет..

CyRax, я сначала вообще всё без ByVal сделал. Всё то же самое.. :-((

 

И потом, ведь нужно не только в декларации функции правильно переменные описать, но и дальше в программе правильно их объявить..

Ответить

Номер ответа: 4
Автор ответа:
 Chill



ICQ: 554200 

Вопросов: 101
Ответов: 343
 Профиль | | #4 Добавлено: 17.02.04 15:46

Кинь мне на мыло dll, если есть - ее исходники и проект на vb...

Попробую сделать... Потом объясню как сделал, если получится конечно =)

chill_hr@mail.ru - кидай сюда!!!

Ответить

Страница: 1 |

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



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