Есть описание на C

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Есть описание на C

Сообщение drronnie » 01.08.2004 (Вс) 5:00

Вот описание:
RemtCtrl.dll Export Functions:
◆ InitRemtCtrl Call function "InitRemtCtrl" once to initial the remote control device and driver after library loaded.
Syntax BOOL InitRemtCtrl (HWND hWndApp);
Parameters hWndApp NULL, no other values are valid.
Return Values TRUE if the remote control initiation success, FALSE if the remote control initiation fail.
Так объявляю:
Private Declare Function InitRemtCtrl Lib "RemtCtrl.dll" (ByVal hWndApp As Long) As Boolean
Вылезает ошибка
Can't find DLL entry point...

Что я делаю не так?
Компиляция - перевод словесного поноса в машинный код.

Mogavk
Новичок
Новичок
Аватара пользователя
 
Сообщения: 34
Зарегистрирован: 27.07.2004 (Вт) 20:58

Сообщение Mogavk » 01.08.2004 (Вс) 13:17

InitRemtCtrl <- а это ты куда потерял?
From Community,For Community

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 01.08.2004 (Вс) 14:40

Mogavk писал(а):InitRemtCtrl <- а это ты куда потерял?
В каком смысле потерял? Надо что так?
Private Declare Function InitRemtCtrl Lib "RemtCtrl.dll" Alias "InitRemtCtrl" (ByVal hWndApp As Long) As Boolean

Так просто точку входа InitRemtCtrl найти не может? Вот я и спрашиваю... что я не так сделал?
Ответьте, плз, конкретнее...
Компиляция - перевод словесного поноса в машинный код.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 01.08.2004 (Вс) 15:23

Дело в том, что апишный BOOL - это не 2 байта, а 4. Возвращай лонг.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 02.08.2004 (Пн) 1:14

Ennor писал(а):Дело в том, что апишный BOOL - это не 2 байта, а 4. Возвращай лонг.
Private Declare Function InitRemtCtrl Lib "RemtCtrl.dll" (ByVal hWndApp As Long) As Long
Вот так? Всё равно таже трабла :((
Компиляция - перевод словесного поноса в машинный код.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.08.2004 (Пн) 5:14

Проверь, действительно ли в RemtCtrl.dll есть экспортируемая функция с таким именем. Если она к тому же cdecl, что весьма вероятно, раз она сишная, тогда её уже никак не вызвать.

Тип возвращаемого значения-то уж конечно не причём, раз "Can't find DLL entry point..."
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 02.08.2004 (Пн) 10:59

Ну, на самом деле попытаться вызвать cdecl-функцию можно, правда, никто ничего не гарантирует :) . Другое дело, что если бы она была действительно cdecl, то ошибка была бы другая - Bad DLL calling convention. Проверь в Dependency Walker список экспорта - видимо, либо у нее алиас надо ставить (а у тебя его нет, т.е. имя функции у тебя совпадает с ее именем в библе), либо она банально не экспортится...

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 02.08.2004 (Пн) 14:31

прошу прощение а что есть cdecl?
2Ennor а как это сделать, как вызвать... ну хотя б попытаться?
Компиляция - перевод словесного поноса в машинный код.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 02.08.2004 (Пн) 14:54

Пардон... последний пост - туфту сморозил....
Да, она cdecl вот (наверно) СИшная декларация:
typedef BOOL (__cdecl *InitRemtCtrl) (HWND hWndApp);
Ну дык как её вызвать? И как найти имя функции в библиотеке... или как её вызвать?
Компиляция - перевод словесного поноса в машинный код.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.08.2004 (Пн) 16:31

Ennor писал(а):Ну, на самом деле попытаться вызвать cdecl-функцию можно, правда, никто ничего не гарантирует :)

Вот и я про то же :-)
Ennor писал(а): . Другое дело, что если бы она была действительно cdecl, то ошибка была бы другая - Bad DLL calling convention.

Я не про это... Я предположил, что она экспортируется по mangled имени, что-то вроде
Код: Выделить всё
??4CSingleLock@@QAEAAV0@ABV0@@Z
(первая попавшаяся функция из mfcsubs.dll). В этом случае она вдобавок и cdecl, и тогда пытаться с ней разбираться имхо не оправдывает себя.


2drronnie: запусти
Код: Выделить всё
"C:\Program Files\Microsoft Visual Studio\VC98\Bin\dumpbin.exe" /exports путь_к_твоей_библиотеке >c:\debug.txt

c:\debug.txt потом покажи нам :-)

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 02.08.2004 (Пн) 17:30

Спасибо, бум пробовать...
Компиляция - перевод словесного поноса в машинный код.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 20.09.2005 (Вт) 14:31

Вспомнил про свой старый топик... :D а времени ж прошло!
Ну вот debug.txt...
Microsoft (R) COFF Binary File Dumper Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.


Dump of file C:\msi\RemtCtrl.dll

File Type: DLL

Section contains the following exports for RemtCtrl.dll

0 characteristics
3EE68EA4 time date stamp Wed Jun 11 05:06:28 2003
0.00 version
1 ordinal base
9 number of functions
9 number of names

ordinal hint RVA name

1 0 000017D0 ChannelFineTune
2 1 00001880 GetFreeScanStatus
3 2 000018A0 GetModelName
4 3 00001060 InitRemoteCtrl
5 4 00001E00 ReadRemoteData
6 5 00001A40 SetAudioOff
7 6 000019B0 SetAudioOn
8 7 00001820 SetCountryCode
9 8 00001610 SetTVChannel

Summary

15000 .data
2000 .rdata
2000 .reloc
7000 .text

Компиляция - перевод словесного поноса в машинный код.

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 20.09.2005 (Вт) 17:36

Ну вот и трабла: InitRemoteCtrl, а не InitRemtCtrl ;)
То, что для одних константа, для других только переменная...

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 21.09.2005 (Ср) 15:29

Private Declare Function InitRemtCtrl Lib "c:\msi\RemtCtrl.dll" Alias "InitRemoteCtrl" (ByVal hWndApp As Long) As Long

Теперь говорит "Bad DLL calling convertion" что делать?
Возможно её вызвать?
Компиляция - перевод словесного поноса в машинный код.

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 21.09.2005 (Ср) 16:14

А вот теперь похоже что тяжко это будет ;) Похоже на то, что все же cdecl, а не stdcall... Параметры функции и возвратное значение можеш сказать?
То, что для одних константа, для других только переменная...

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 22.09.2005 (Чт) 8:11

Odrick писал(а):Параметры функции и возвратное значение можеш сказать?


Parameters
hWndApp
NULL, no other values are valid.
Return Values
TRUE if the remote control initiation success, FALSE if the remote control initiation fail.

ты об этом?

А можно написать на чём-нибудь (C++ или asm) библиотеку которая будет вызывать эту функцию?....
Компиляция - перевод словесного поноса в машинный код.

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 22.09.2005 (Чт) 12:35

Гм. Ну в общем если действительно cdecl, то работать таки не будет. Да, можно написать dll-буфер на C между твоим приложением и этой dll. Я в свое время такое делал...
То, что для одних константа, для других только переменная...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.09.2005 (Чт) 14:54

У Оловянникова был пример вызова cdecl-функции: там переходник строился динамически.
Лежит на vbrussian.com
Изображение

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 27.09.2005 (Вт) 11:51

tyomitch писал(а):У Оловянникова был пример вызова cdecl-функции: там переходник строился динамически.
Лежит на vbrussian.com


Спасибо, Тёмыч и всем остальным..... а всё-таки можно как-нибудь вызвать её не через CallWindowProc а просто подключить как dll -ку?
А пока делаю так:
Код: Выделить всё
    ptLib = LoadLibrary("c:\msi\remtctrl.dll")
    ptFunc = GetProcAddress(ptLib, "InitRemoteCtrl")
   
    Debug.Print CallWindowProc(ptFunc, Me.hWnd, vbNull, 0&, 0&)
End Sub


как сообщать текстовые параметры функции? в Unicode?
И последнее а можно как-то посмотреть, какие функции вызывает чужая программа при работе и с какими параметрами?
Компиляция - перевод словесного поноса в машинный код.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.09.2005 (Вт) 13:01

drronnie писал(а):Спасибо, Тёмыч и всем остальным..... а всё-таки можно как-нибудь вызвать её не через CallWindowProc а просто подключить как dll -ку?

Нет.

drronnie писал(а):как сообщать текстовые параметры функции? в Unicode?

Это зависит от того, как твоя функция их ожидает получить. Я же про твою функцию так ничего и не знаю, кроме её названия :roll:

drronnie писал(а):И последнее а можно как-то посмотреть, какие функции вызывает чужая программа при работе и с какими параметрами?

Можно. Любой отладчик/дизассемблер в помощь.
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 49

    TopList