создание DLL в VB NET. Должно ли быть библиотекой классов? - PullRequest
0 голосов
/ 23 июня 2010

У меня есть другая программа (для которой у меня нет уже скомпилированного исходного кода), которая вызывает DLL. Я хочу поменять библиотеку DLL и поставить свою собственную на место, чтобы запустить свою собственную модель (внутри библиотек DLL), а не другую, поставляемую с программным обеспечением.

Я создал библиотеки DLL в Фортране, используя компилятор G95, который работает, объявляя их динамически, как показано ниже. Я также рассмотрел создание DLL с помощью VB NET, но, похоже, единственными вариантами являются Class Libaries, которые не вызываются и не объявляются так же, как показано ниже. У меня есть код для объявления функции от разработчика, но это все (см. Ниже)

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

Вот шаблон, вызывающий код для работающих библиотек Фортрана. Как мне сделать этот вид DLL с VB NET?

Спасибо.

Declare Sub CalcLoss Lib "318dll.dll" (TanTHT As Single, RanTHT As Single, EXTNSN As Boolean, ByVal Mode As String, Loss As Single, FSPLSS As Single)

Ответы [ 5 ]

2 голосов
/ 24 июня 2010

Я думаю, что вы хотите создать библиотеку DLL Win32, а не библиотеку .NET. Вот почему вы не видите вариант, который вы хотите. Я не уверен, есть ли способ сделать это в VB.NET. Для этого вам, вероятно, потребуется переключиться на обычный Visual Basic (не .NET).

0 голосов
/ 29 июня 2010

Таким образом, решение оказалось просто написать DLL на фортране, потому что я мог просто скопировать и вставить кучу кода, уже infortran, вместо того, чтобы VB DLL вызывал Fortran DLL.теперь все это одна DLL, и это работает.Спасибо всем за участие.

0 голосов
/ 24 июня 2010

Джонатан Аллен вариант № 1 является лучшим. Вы можете использовать библиотеки .NET из c ++, VB6.0 и т. Д., У MS есть документы на них. Просто используйте вашу библиотеку таким образом.

ОДНАКО, если по какой-то причине это не сработает, сделайте это (предупреждение, HACK ), если вы вызываете его только 1x / сек или меньше:

C ++ Win32 dll: записывает значения parm во временный файл. Запускает ваш код VB.NET, скомпилированный в EXE-файл, который читает временный файл и записывает другой файл с результатами. Win32 dll ждет VB EXE, затем читает файл (действительно ждите его с помощью процесса lib, а не просто ищите выходной файл, это мир боли, ожидающий случиться)

0 голосов
/ 24 июня 2010

Если вы хотите написать код в .Net (VB.Net/C#) и открыть его для неуправляемых приложений, вы можете попробовать этот инструмент, который я написал.Он позволяет помечать методы с помощью атрибутов, а затем повторно собирать сборку, чтобы разрешить экспорт.

Этот код не поддерживается, но с ним можно поиграть бесплатно. ИСПОЛЬЗУЙТЕ НА СВОЙ СТРАХ И РИСК

... Extended ...

После того, как вы скомпилируете сборку с моим ExportAttribute для метода экспорта, вы можете запустить перекомпилятор, чтобы разобрать и собрать ваше приложение.Это было написано только в качестве доказательства концепции.Но это работало между сборками VB6 / Winbatch и .Net.Он также был протестирован с функциями .Net DllImport / PInvoke.

0 голосов
/ 24 июня 2010

Вариант 1. Используйте C ++ / ME для создания неуправляемой оболочки вокруг вашей библиотеки VB.NET DLL.

Вариант 2. Обновление до версии .NET FORTRAN.

...