Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 | 2 |

 

  Вопрос: Перевести из С++ Добавлено: 22.10.04 13:37  

Автор вопроса:  LamerOnLine | ICQ: 334781088 
ULONG PacketGetAdapterNames(PTSTR pStr, PULONG BufferSize)
Понятно, ULONG - long и есть, неважно что Unsigned. PTSTR как лучше передать? Как byval as String? И PULONG как byref as long?
Заколебался, на все варианты выдает BAD DLL Convention. Help!

Ответить

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

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



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #1 Добавлено: 22.10.04 14:01
Ну, кто знает?
Может быть можно передать PTSTR как byval as long, а значение взять
StrPtr()? Но не выходит. Возможно PTSTR - не long?

Ответить

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



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #2 Добавлено: 22.10.04 15:05
Да что такое! Все перепробовал. Везде пишут то, что я и сам написал:
Private Declare Function PacketGetAdapterNames Lib "packet" (ByVal pStr As
String, ByRef BufferSize As Long) As Long
Так нифига же. Bad DLL Convention! Мож глюк какой?
К сведению, в Дельфе это
Function PacketGetAdapterNames(pStr:pchar;BufferSize:PLongWord) : LongWord;
         cdecl external DLL;
Кто что-нибудь сказать может по этому поводу?

Ответить

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



ICQ: 8370005 

Вопросов: 34
Ответов: 466
 Профиль | | #3 Добавлено: 22.10.04 16:43
укажи полное имя ДЛЛ

Ответить

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



Вопросов: 117
Ответов: 1538
 Профиль | | #4 Добавлено: 22.10.04 20:07
§Ј§в§а§Х§Ц §а§Т§С §б§С§в§С§Ю§Ц§д§в§С §Х§а§Э§Ш§Я§н §Т§н§д§о ByVal.

§Є §Ц§л§Ч:
[Public | Private ] Declare Function name [CDecl] Lib "libname"
ЁІ[Alias "aliasname"] [([arglist])] [As type]

Ответить

Номер ответа: 5
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #5 Добавлено: 22.10.04 20:09
Мдя... Интересно кошка сер.т

Повтор: Оба параметра по идее требуют указатель, я обычно даю их ByVal

И о соглашениях, может указать явно:
[Public | Private ] Declare Function name [CDecl] Lib "libname"
ЁІ[Alias "aliasname"] [([arglist])] [As type]

Ответить

Номер ответа: 6
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #6
Добавлено: 23.10.04 10:30
А ты массив байтов попробуй и as any

Ответить

Номер ответа: 7
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #7 Добавлено: 25.10.04 08:16
packet.dll из состава WinPCap 3.01a

Ответить

Номер ответа: 8
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #8 Добавлено: 25.10.04 08:28
Пробовал массив байтов, но как ByRef и как ByVal VarPtr. Результат тот же.
Подозреваю - глюк VB VM.

Ответить

Номер ответа: 9
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #9 Добавлено: 25.10.04 08:39
Так ведь указатель на long - то же что и ByRef as Long. Смысла не вижу
передавать по значению. Хотя пробовал. Результат - Bad DLL Convention.
Бывали и иные исходы, когда размер буфера увеличивал. Тогда среда просто
схлопывалась.

Ответить

Номер ответа: 10
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #10 Добавлено: 25.10.04 09:00
Попробую через LoadLibrary, GetProcAddress и CallWindowProc. Может сработает...
Кстати, вопрос ламерский:
Если функция объявлена через Declare из библиотеки, а затем используется LoadLibrary для той же библиотеки - не загрузит ли прога в память две копии этой dll-ки?

Ответить

Номер ответа: 11
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #11 Добавлено: 25.10.04 09:57
Прикиньте, такой вот изврат сработал!!:

Option Explicit
Option Base 1
Private Declare Function PacketGetAdapterNames Lib "wpcap" (ByVal pStr As
String, ByRef BufferSize As Long) As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As
Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA"
(ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As
Long, ByVal lpProcName As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA"
(ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal
wParam As Any, ByVal lParam As Any) As Long
Dim mHandle As Long
Dim fAddr As Long

Private Sub Form_Load()
Dim sPtr As String
Dim Size As Long
Dim pSize As Long
sPtr = Space(1024)
Dim psPtr As Long
psPtr = StrPtr(sPtr)
Size = Len(sPtr)
pSize = VarPtr(Size)
mHandle = LoadLibrary("Packet.dll";)
fAddr = GetProcAddress(mHandle, "PacketGetAdapterNames";)
CallWindowProc fAddr, psPtr, pSize, ByVal 0&, ByVal 0&
Text1.Text = sPtr
End Sub

Private Sub Form_Unload(Cancel As Integer)
FreeLibrary mHandle
End Sub

Ответить

Номер ответа: 12
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #12 Добавлено: 25.10.04 09:59
Пардон, библиотека packet.dll, а не wpcap.dll. Хотя функция эта есть в
обоих. Обе работают! А стандартными средствами VB - ни в какую!!

Ответить

Номер ответа: 13
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #13
Добавлено: 25.10.04 11:07
Если функция объявлена через Declare из библиотеки, а затем используется LoadLibrary для той же библиотеки - не загрузит ли прога в память две копии этой dll-ки?

Нэ, это недопустимо, загрузчик такое не сделает. А примерчик с CallWindowProc просто супер :) Я тоже парился над одной длл-кой, теперь знаю как решить проблему :) Сенкс!

Ответить

Номер ответа: 14
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #14
Добавлено: 25.10.04 11:09
Вот, ещё, если напишешь тот файрвол, что ты пишешь, в примерах он будет? :)

Ответить

Номер ответа: 15
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #15 Добавлено: 25.10.04 11:26
Да, сам не думал что Такое придет в голову. Наверное, это после вчерашних
тех литров пива :))

Ответить

Страница: 1 | 2 |

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



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