Заархивировано

Эта тема находится в архиве и закрыта для дальнейших ответов.

Дос

С# & Dll(com) & Foxpro

Рекомендуемые сообщения

Здравствуйте господа прогеры). Вопрос возник: Можно ли dll(являющийся COM) написанной на Visual С# прекерепить к программкам написанным в FoxPro9? Если можно то как загрузить эту dll-ку в фоксе?

 

P.S. Знаю что Фокс в наше время уже устарел, но вопреки всему столкнулся с такой проблемой…

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дос

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

VanDerKeen

 

я все таки надеюсь что тут есть толковые программеры... И все же жду ответа от mr.Faster-а, на мое мнение одного из профессиональных тут кодеров.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно. Как и любой другой com-объект.

 

Только вот зачем все это...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

MarkV

 

Сказал же задача такая, я вообще фокс терпеть не могу, недоязык блин... Но вот надо. К С++ привязал нормально. Нужен в Фрксе, а как? хз..

 

xct

 

Ничего стоющего не нашел

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) Обьекты которые хотелось бы использовать в VFP9 должны быть с атрибутом [ComVisible=true]

 

2) Затем скомпилированную .NET сборку нужно зарегистрировать так чтобы она стала видна подсистеме COM

 

REGASM somenetassembly.dll /tlb:somenetassembly.tlb /codebase

 

Параметр /codebase нужно использовать если .net сборка не была помещена в GAC.

 

ПОсле этого все COMVisible функции/обьекты этой сборки будут видны подсистеме COM и их можно будет вызывать хоть из c++ хоть из Visual Basic 6.0 и хоть из VFP 9

 

Например так:

 

oObj = CreateObject("somenetassembly.SomeClass")

With oObj

.SomeProperty = "helloworld"

.DoSomeFunct()

EndWith

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

dmandreev

 

Спасибо, попробую :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

dmandreev

 

Как и было рекомендовано, делал нижеследующие:

 

REGASM convertlib.dll /tlb:convertlib.tlb /codebase

 

Параметр /codebase нужно использовать если .net сборка не была помещена в GAC.

 

Выдает ошибку:

 

RegAsm error: Failed to load 'E:\Documents and Settings\Bulat\Мои документы\ConvertLib\ConvertLib\bin\Debug\convertlib.dll' because it i

s not a valid .NET assembly

 

Пробывал и без /codebase, результат такой же. :(

 

Установлен Visual Studio 2005 с Microsoft .NET Framework 2.0. ComVisible=true тоже поставил.

 

В чем траблы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
dmandreev

 

Как и было рекомендовано, делал нижеследующие:

 

REGASM convertlib.dll /tlb:convertlib.tlb /codebase

 

Параметр /codebase нужно использовать если .net сборка не была помещена в GAC.

 

Выдает ошибку:

 

RegAsm error: Failed to load 'E:\Documents and Settings\Bulat\Мои документы\ConvertLib\ConvertLib\bin\Debug\convertlib.dll' because it i

s not a valid .NET assembly

 

Пробывал и без /codebase, результат такой же. :(

 

Установлен Visual Studio 2005 с Microsoft .NET Framework 2.0. ComVisible=true тоже поставил.

 

В чем траблы?

 

Возможно там какие нибудь references. Но это просто так в переписке не разрулить. Вопрос просто такой - у тебя convertlib на много сторонних библиотек референсы имеет? Они сильно раскиданы по диску?

 

Или решение на "удачу"

Попробуй запустить regasm точно из пути для конкретно той версии под которую компилируешь, например C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm.exe

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

dmandreev

 

Или решение на "удачу"

Попробуй запустить regasm точно из пути для конкретно той версии под которую компилируешь, например C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm.exe

 

-------------------------------------------

 

Попробывал, переместил свою dll-ку в E:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 и вот что у меня вышло с параметром /codebse:

 

E:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>REGASM convertlib.dll /tlb:convert

lib.tlb /codeb

Microsoft ® .NET Framework Assembly Registration Utility 2.0.50727.42

Copyright © Microsoft Corporation 1998-2004. All rights reserved.

 

RegAsm : warning RA0000 : Registering an unsigned assembly with /codebase can ca

use your assembly to interfere with other applications that may be installed on

the same computer. The /codebase switch is intended to be used only with signed

assemblies. Please give your assembly a strong name and re-register it.

Types registered successfully

Assembly exported to 'E:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\convertlib.t

lb', and the type library was registered successfully

 

А вот что без /codebase

 

E:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>REGASM convertlib.dll /tlb:convertlib.tlb

Microsoft ® .NET Framework Assembly Registration Utility 2.0.50727.42

Copyright © Microsoft Corporation 1998-2004. All rights reserved.

 

Types registered successfully

Assembly exported to 'E:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\convertlib.tlb', and the type library was registered successfully

 

Это значит что все прошло гладко? Во втором случае вроду все прошло успешно :)

 

Да и еще у меня три Framework-а(версий 1.0, 1.1 и 2.0) установленно, выходит что 2.0 не используется системой по умолчанию?

Как сделать чтоб по умолчанию у меня был Framework 2.0

 

 

===================

 

references которые я использую в convertlib:

1. System

2. System.Data

3. System.Xml

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да все почти нормально.

 

В системе два каталога в которых лежат regasm.exe для .net framework 1.1 и 2.0. Это не значит что 2.0 "используется по умолчанию", это значит что на твоей машине в переменной %PATH% путь торчит к каталогу с утилитами для .net framework 1.1

regasm.exe который для версии 1.1 при попытке им зарегить сборку для 2.0 будет генерить сообщение об ошибке.

 

Кстати зря ты копируешь свою dll в тот каталог ;)

 

Тебе надо было в коммандлайне выполнить так:

 

"E:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm.exe" "E:\Documents and Settings\Bulat\Мои документы\ConvertLib\ConvertLib\bin\Debug\convertlib.dll" ...

 

 

Параметр codebase нужен для ресолва дополнительных сборок, что в твоем случае не обязательно, у тебя ссылки только на системные.

 

 

Почитай что нибудь про GAC и Strong name conventions. Кстати с 28 октября будет доступен русский MSDN Library

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

dmandreev

 

Благодарю за помощь, ты очень помог, спасибо большое :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Официальный перевод? К 2008 студии будет?

 

Ну да.

 

Полный перевод Visual Studio Team Suite 2008 и Team Foundation Server 2008 и полный перевод MSDN Library. Последнее на мой взгляд вообще чума.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты