Страница: 1 |
Чёртов Си!!! :-(((( Есть dll, написанная на Си. Мне нужно динамически её подключить в VB.. Вот параметры dll: CHECKERDLL_API int CChecker_SignDocumentA ( Вот так нихрена не получается: Private Sub Form_Load() Dim KPath As String Dim KOutputData As String KPath = "C:\...\Keys\" Вылетает с ошибкой "Инструкция по адресу ... обратилась к памяти по адресу ... Память не может быть written...". И всё. ВБ вылетает.. Думаю, вся проблема в объявлении переменных.. Но понять как их надо объявлять, не могу.. :-((((( Help!!!
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... Если будут - пиши... Chill, не я компилил dll, но .def, в принципе есть.. "_CChecker_SignDocumentA@28" - ничего не меняет.. CyRax, я сначала вообще всё без ByVal сделал. Всё то же самое.. ( И потом, ведь нужно не только в декларации функции правильно переменные описать, но и дальше в программе правильно их объявить.. Кинь мне на мыло dll, если есть - ее исходники и проект на vb... Попробую сделать... Потом объясню как сделал, если получится конечно chill_hr@mail.ru - кидай сюда!!! Страница: 1 |
Вопрос: Си++ => VB
Добавлено: 16.02.04 17:45
Автор вопроса: Scuder | ICQ: 143518458
const char * szKeyPath, - путь к ключам
const char * szCodePhrase, - пароль от ключа
const char * szSecretKeyFile, - имя файла с закрытым
ключем
const char * pInputData, - то, что надо подписать
int nInputDataSize, - длина того, что надо
подписать
char ** ppOutputData, - сюда возвращается буфер с
подписанными данными
int * pnOutputDataSize - сюда возвращается длина
получившихся данных
);
(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
Dim KPass As String
Dim KSecretFileName As String
Dim KInputData As String
Dim KInputDataSize As Integer
Dim KOutputDataSize As Integer
KPass = "password"
KSecretFileName = "secret.key"
KInputData = "12345678901234567890123456789012345678901234567890"
KInputDataSize = 50
Call CChecker_SignDocumentA(KPath, KPass, KSecretFileName, KInputData, KInputDataSize, KOutputData, KOutputDataSize)
End Sub
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
Chill
ICQ: 554200
Вопросов: 101
Ответов: 343
Профиль | | #1
Добавлено: 16.02.04 18:18
Номер ответа: 2
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #2
Добавлено: 17.02.04 02:34
А почему у тебя приёмники ByVal? Такие параметры не изменятся, т.к. передаётся их копия.
Номер ответа: 3
Автор ответа:
Scuder
ICQ: 143518458
Вопросов: 12
Ответов: 37
Профиль | | #3
Добавлено: 17.02.04 11:26
Номер ответа: 4
Автор ответа:
Chill
ICQ: 554200
Вопросов: 101
Ответов: 343
Профиль | | #4
Добавлено: 17.02.04 15:46