Načtení DLL v MSVC++ .NET – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Načtení DLL v MSVC++ .NET – .NET – Fórum – Programujte.comNačtení DLL v MSVC++ .NET – .NET – Fórum – Programujte.com

 

Matěj Pácha0
Super člen
10. 2. 2007   #1
-
0
-

Potřeboval bych načíst dll, přičemž je mi jedno, kdy se načte, jestli při sestavování programu, při jeho startu nebo při použití funkce z dll do programu v CLI C++. Hlavně aby to bylo jednoduše smiling smiley
Abych nevypadal jako úplná lama, hledal jsem na msdn, ale asi špatně. Našel jsem tam návody na linkování unmanaged knihoven, ale nic, co bych potřeboval. Mám jen dll (a zdroják v C#) a chci se dostat k jeho funkcím, resp. k jeho jmennému prostoru. Když použiju dll pomocí direktivy #using "neco.dll", začne fungovat IntelliSense a po napsání using namespace Neco; mi začne nabízet jeho prvky. Pokračuji tedy v programování, ale narazím při pokusu o sestavení - hlásí chybu nejednozančnosti jmen, že "Neco" může být i "Neco::Neco" atp. Snažím se tedy "okakat" systém a píšu úplné názvy objektů. Při dalším pokusu o sestavení mi vypíše chybu syntaxe u identifikátoru členské funkce z třídy Neco, ačkoliv nevím proč, když mi tento název nabídl sám IntelliSense.
Moje naivní představa je, že vložím na začátek #using "neco.dll" a hned můžu používat všechny jeho funkce. Jsem opravdu naivní? Pokud ne, napište mi prosím, jak se "na lopatě sedí".
Díky

Nahlásit jako SPAM
IP: ...–
Ajem tíčr, andrgraund tíčr!
DeaLer+2
Hero
10. 2. 2007   #2
-
0
-

Tak by to taky mělo fungovat (když se jedná o assembly a ne Win32 DLL) a mělo by to bez problémů fungovat (i když u C++/CLI je asi možný všechno). Zkus přihodit zdroják.

PS: předpokládám, že máš danou knihovnu správně nareferencovanou, protože jinak by IntelliSense mlčel

Nahlásit jako SPAM
IP: ...–
Dušan Janošík | web: djanosik.cz, @djanosik
Matěj Pácha0
Super člen
10. 2. 2007   #3
-
0
-

Tak tohle je začátek z Form.h



#pragma once
#using "Modbus.dll"

//static Modbus::Device::ModbusSerialMaster^ Modbus::Device::ModbusSerialMaster::CreateRtu(System::IO::Ports::SerialPort ^serialPort);
namespace novy {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::Reflection;
using namespace Modbus;
using namespace Modbus::Device;
using namespace Modbus::IO;
using namespace Modbus::Util;

A tohle je obsluha kliknutí na tlačítko. V podstatě šlo jen o vyzkoušení, jak se načítá dll. Mám k tomu dll zdrojáky, ale v C#.


private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
serialPort1->Open();

//ModbusSerialMaster^ master = gcnew ModbusSerialMaster::CreateRtu(serialPort1);
Modbus::Device::ModbusSerialMaster^ master = gcnew Modbus::Device::ModbusSerialMaster::CreateRtu(serialPort1);

System::Byte slaveID = 1;
unsigned short startAdress = 100;
array<unsigned short,1>^ registers = gcnew array<unsigned short,1> {1,2,3};

master->WriteMultipleRegisters(slaveID,startAdress,registers);

serialPort1->Close();
}

Tohle je příklad výpisu chyb na using namespace:
error C2872: 'Modbus' : ambiguous symbol could be 'Modbus' or 'modbus.dll : Modbus::Modbus'

A tady chyba na použití funkce z dll:
error C2061: syntax error : identifier 'CreateRtu'

Nahlásit jako SPAM
IP: ...–
Ajem tíčr, andrgraund tíčr!
DeaLer+2
Hero
10. 2. 2007   #4
-
0
-

No nemůžu si to ověřit v praxi, ale ambiguous znamená dvojznačný, tak zkus napsat kód takhle:

using namespace Modbus;

using namespace Modbus::Modbus::Device;
using namespace Modbus::Modbus::IO;
using namespace Modbus::Modbus::Util;

Nahlásit jako SPAM
IP: ...–
Dušan Janošík | web: djanosik.cz, @djanosik
Matěj Pácha0
Super člen
10. 2. 2007   #5
-
0
-

To je právě to, že Modbus::Modbus není namespace, ale class, takže to nepůjde. Když požiju jen using namespace Modbus (a upřesním funkci), zůstane mi viset jen chyba error C2061: syntax error : identifier 'CreateRtu'. Nejsem zas takový odborník, abych věděl, jaký vliv má původní jazyk na konečnou podobu dll, ale pomalu začínám mít tušení, že budu muset svou aplikaci přepsat do C#...

Nahlásit jako SPAM
IP: ...–
Ajem tíčr, andrgraund tíčr!
DeaLer+2
Hero
10. 2. 2007   #6
-
0
-

Použitý jazyk nemá na výsledný IL praktický žádný vliv (i když drobné odlišnosti tam jsou), takže přepisovat to do C# nebude mít velkej význam (i když by to bylo z mého pohledu snažší). Já s C++/CLI vůbec nepracuju, takže nevím čím to může bejt způsobený, ale snad bych na to přišel, kdybych to mohl u sebe zkusit. Pokud to je možný, tak mi kdyžtak pošli zdroje na mail.

Nahlásit jako SPAM
IP: ...–
Dušan Janošík | web: djanosik.cz, @djanosik
Matěj Pácha0
Super člen
10. 2. 2007   #7
-
0
-

No, ono toho je dost. Zkusim na tom popracovat a kdyžtak se ještě ozvu. Jiné dll se mi totiž podařilo normálně rozběhat, takže zkusím sehnat lepší verzi. Jak jsem koukal na netu, tak originál souboru modbus.dll stojí něco okolo 195 USD, tak kdo ví, jak to s tím je. Tohle jsem našel jako návod s příkladem a ačkoliv jsou zdroje (zdá se) kompletní, nejde to zkompilovat, vypisuje spoustu chyb, ale nejsem v C# doma, tak to nebudu snad ani řešit. Zatím díky za pomoc.

Nahlásit jako SPAM
IP: ...–
Ajem tíčr, andrgraund tíčr!
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 53 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý