Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Подключение dll. Добавлено: 23.12.05 17:38  

Автор вопроса:  Ruslan_x
Есть код, который отлично идет под VC++.NET.

Вопрос: сложно ли преобразовать этот код так, чтобы он шел под VB.NET?

Главным образом, требуется именно подключение dll.

Я уже много что пытался сделать, но безуспешно. Главное - я не очень представляю, сложная это задача, которую может решить только крутой профессионал, или можно все-таки и любителю разобраться?..



#include "stdafx.h"
#include "stdio.h"
#include "windows.h"
#using <mscorlib.dll>
using namespace System;

typedef void* (WINAPI *FPINIT)  (int, char **);
typedef char* (WINAPI *FPERR)   (void*);
typedef char* (WINAPI *FPPARSE) (void*, char*);
typedef void  (WINAPI *FPDEL)   (void *);

int _tmain (int argc, char **argv)
{
   char p[] = "Test string";
   HINSTANCE hLib = LoadLibrary("libmecab.dll");
   
   if (hLib) {
      FPINIT  fpInit  = (FPINIT)  GetProcAddress(hLib, "mecab_new");
      FPERR   fpErr   = (FPERR)   GetProcAddress(hLib, "mecab_strerror");
      FPPARSE fpParse = (FPPARSE) GetProcAddress(hLib, "mecab_sparse_tostr");
      FPDEL   fpDel   = (FPDEL)   GetProcAddress(hLib, "mecab_destroy");
      
      if (fpInit && fpErr && fpParse && fpDel) {
         void *c = (void *)(*fpInit)(argc, argv);
         if (!c) {
            fprintf (stderr, "Exception %s\n", (*fpErr)(c));
            FreeLibrary(hLib);
            return -1;
         }
         
         printf ("INPUT: %s\n", p);
         printf ("RESULT:\n%s", (char *)(*fpParse)(c, p));
         (*fpDel)(c);
      }
      FreeLibrary(hLib);
   }
   
   return 0;
}


Саму DLL-ку на всякий случай сюда выложил:
http://hw001.gate01.com/ruslan/other/libmecab.dll

Ответить

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

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



Вопросов: 7
Ответов: 41
 Профиль | | #1 Добавлено: 23.12.05 17:45
.... Имеется в виду VB.NET 2003.

Ответить

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



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

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #2
Добавлено: 23.12.05 18:43
Не сложно:)
sne и я можно сказать специалисты по этому вопросу.

Ответить

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



Вопросов: 7
Ответов: 41
 Профиль | | #3 Добавлено: 23.12.05 19:38
Так можно рассчитывать на вашу помощь?

Или хотя бы подскажите, как правильно объявить переменные:


typedef void* (WINAPI *FPINIT) (int, char **);
typedef char* (WINAPI *FPERR) (void*);
typedef char* (WINAPI *FPPARSE) (void*, char*);
typedef void (WINAPI *FPDEL) (void *);


Буду вам очень признателен.

Ответить

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



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

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #4
Добавлено: 23.12.05 20:07
Подождем sne. Это была совместная работа.

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #5 Добавлено: 23.12.05 22:11
можно и умереть пока тут sne дождаться :)

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #6
Добавлено: 24.12.05 00:02
Меня ждать долго не придется, я не смотря на мою вялую активность читаю форум ;) и в курсе происходящих дел...

ЗЫ
Вообще обычно такое предлагается за денюшку, т.к. время свободного оч. мало... сессия...
Если не к спеху то вполне возможно, а если спешишь, то искать добровольца прийдется, или же объявить вознаграждение некое :))

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 24.12.05 00:14
ЗЫ
Единственное ч чем
повозиться прийдется это с:
           typedef void* (WINAPI *FPINIT) (int, char **);

Т.к. тут передается указатель на указатель, прийдется создать
функцию-переходник...

Ответить

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



Вопросов: 7
Ответов: 41
 Профиль | | #8 Добавлено: 24.12.05 06:11
... "функция-переходник"?

Дело ясное, что сам я здесь не разберусь. Хоть с этим теперь понятно. :)

Сейчас я вообще-то уже использую эту библиотеку совместно с VB.NET. Есть программка к этой DLL-ке, которая работает с файлами. То есть есть входной файл и выходной файл с результатами работы.

Вот через эти файлы я и скармливаю этой библиотеке данные и получаю результаты. Однако, такой подход как-то неаккуратно выглядит. Хотелось бы получить прямой доступ к DLL из VB.NET.

По правде говоря, сейчас с этим особой спешки нет, так что могу подождать, когда у уважаемого sne появится время.

Насчет денюшки. Для меня эта задача не так критична, как в прошлый раз. Так что предложить нормальное вознаграждение не смогу. Единственная надежда на бескорыстную помощь форумчан.

Ответить

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



Вопросов: 0
Ответов: 1876


 Профиль | | #9 Добавлено: 24.12.05 06:45
Дай пример данных, с которыми её можно вызвать и получить нормальный результат, а то вообще непонятно, чё это...

Ответить

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



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

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #10
Добавлено: 24.12.05 10:50
Так что предложить нормальное вознаграждение не смогу.


Обозначь ту сумму, которую можешь предложить.
Возможно, в данной ситуации, она будет вполне приемлемой.

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #11
Добавлено: 24.12.05 11:50
Раз время терпит, то я бы мог свободно поразбираться в НГ, числа 2, 3 и на халяву :) Если конечно никто еще не подмагнет... там все равно все отходить будут, делать будет нечего :)

Ответить

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



Вопросов: 7
Ответов: 41
 Профиль | | #12 Добавлено: 24.12.05 18:51

Дай пример данных, с которыми её можно вызвать и получить нормальный результат, а то вообще непонятно, чё это...


Пожелание вполне понятное.

Вообще-то эта библиотека для разбиения на отдельные слова текста на японском языке. Возможно, некоторые знают, что в яп. языке между словами нет пробелов. И строчка представляет из себя неразрывный поток символов.

Для компьютерной обработки и нужна эта библиотека, которая как бы вставляет пробелы между словами. Проблема в том, что довольно непросто понять, где кончается одно слово и начитается другое.

--------

Короче говоря, в ближайшее время постараюсь выложить пример реальной работы этой библиотеки - чтобы было более понятно, о чем речь.

Ответить

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



Вопросов: 7
Ответов: 41
 Профиль | | #13 Добавлено: 26.12.05 18:23
На VC++.NET заработало, но есть пара нюансов:
- библиотека требует входной текст в яп. формате Shift-JIS (отличный от UTF-8)
- библиотека требует конфигурационный файл, который должен быть расположен в фиксированном месте (C:\Program Files ...)
- к тому же для работы нужно еще подключать словарь (довольно объемный)

Одним словом, решил я пока закрыть этот вопрос. Слишком много заковырок, которые к делу не относятся. К тому же, скоро обещают выпустить новую версию библиотеки. Тогда, возможно, вернусь к этому же вопросу.

В любом случае, мои благодарности всем ответившим и конкретно sne.

Ответить

Страница: 1 |

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



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