Anonymní profil jurin – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil jurin – Programujte.comAnonymní profil jurin – Programujte.com

 

Příspěvky odeslané z IP adresy 80.188.228.–

jurin
C / C++ › DLL knihovna a export funkce…
16. 9. 2013   #181404

Pokud by to někoho zajímalo, tak sem už objevil kde je problém.

Pokud runtime knihovnu linkujete staticky(Multi-threaded /MT), to jest knihovna LIBCMT.lib, tak tato knihovna obsahuje funkce jako např. Concurrency::details::GlobalNode::Initialize(unsigned short,unsigned short,unsigned long) nebo Concurrency::details::RealizedChore::Initialize(void (__cdecl*)(void *),void *) a linker se nedokáže rozhodnout kterou funkci Initialize použít.

Řešením je linkovat runtime knihovnu dynamicky, což se mě moc nehodí.

Já to vyřešil, že jsem svoji funkci Initialize přejmenoval na Initialize2a def soubor změnil na Initialize = Initialize2        @1

jurin
C / C++ › DLL knihovna a export funkce…
12. 9. 2013   #181296

Ano, to co hlásí linker tomu rozumím. Jenom nevím proč to hlásí.

Tělo funkce Initialize určitě existuje.

Mám deklaraci v hlavičkovým souboru:  

BOOL WINAPI Initialize(BYTE Num,BYTE Timeout,DWORD Version);

Takto mám definici funkce ve zdrojovém souboru

BOOL WINAPI Initialize(BYTE Num,BYTE Timeout,DWORD Version)
{
	//....
	return TRUE;
}

Takto vypadá zápis v .def souboru 

LIBRARY     "BlaBla"
DESCRIPTION "This is production version of BlaBla library"

EXPORTS
	Initialize						@1

Ve zdrojovým souboru s tělem funkce mám include toho hlavičkového souboru.

Funkce Initialize je v celém projektu knihovny pouze jednou.

Exportuji pouze na jenom místě a to přes .def soubor.

Funkce žádným způsobem není spojena s hlavním vstupním bode DLL knihovny funkcí DllMain.

Znovu opakuji co jsem zjistil. Když změním název funkce třeba na Initialize2, všechno projde a funkce Initialize2 je normálně exportovaná z DLL knihovny.

A když všechno přeložím ve starým Visual Studiu 6 i s názvem Initialize, tak je všechno OK.

Jenom v tom novým VS ten název Initialize nějak vadí.

jurin
C / C++ › DLL knihovna a export funkce…
6. 9. 2013   #181111

Nerozumím co myslíš tímto "Jakým způsobem inicializuješ dll ?"

Mě nejde přeložit ta samotná dll knihovna.

jurin
C / C++ › DLL knihovna a export funkce…
6. 9. 2013   #181108

Zdravím všechny,

toto se netýká přímo C++ ale spíše Windows.

Přešel jsem z MS VS 6 na MS VS 10(2010) a má problém z exportem jedné funkce z nativní DLL.

Funkce exportuje pomocí .def souboru a mám problém pouze z jednou funkcí, která se jmenuje Initialize.

Všechny ostatní exportované funkce jsou OK, ale u této jediné mi linker zahlásí error LNK2001: unresolved external symbol Initialize. Přitom tělo funkce určitě existuje. Přitom stačí jenom změnit název funkce na třeba Initialize2 a už se to kompletně přeloží.

Setkali jste se někdo s něčím podobným? Kde by mohl být problém ?

jurin
Delphi › parametr funkce jako ukazatel
18. 4. 2013   #175170

diky.

Jsem si myslel, že s tou strukturou problém nebude, ale raději to tady vypíšu.

Struktura v C++

struct S_REQUEST

{

   BYTE XNumber[20];
   DWORD Exp;
   BYTE Amt[13];
   BYTE Flag;
   BYTE SNumber[10];

}
 

Struktura v Delphi

S_REQUEST = record
    XNumber:        string[20];
    Exp:               DWORD;
    Amt:               string[13];
    Flag:               byte;
    SNumber:       string[10];
  end;

Může to tak být?

jurin
Delphi › parametr funkce jako ukazatel
18. 4. 2013   #175166

Abych to více objasnil.

Mám DLL knihovnu napsanou v C++ a tá má funkci, která přijímá ukazatel na nějakou strukturu.

A já potřebuji zavolat tuto funkci z delphi.Struktura je dejme tomu S_REQUEST.

Deklarace funkce

function MyTestFce(var req: S_REQUEST):Integer; stdcall;                  external 'MyLib.dll'

Volání v kodu

myReq    :  S_REQUEST;

i : Integer;

i := MyTestFce(myReq);              //Je to dobře?

i := MyTestFce(@myReq);          //Nebo takhle?

jurin
Delphi › parametr funkce jako ukazatel
18. 4. 2013   #175162

Zdravím,

jak má vypadat deklarace funkce pokud jako parametr má mít ukazatel na integer?

A jak se potom taková funkce volá?

Děkuji

jurin
C / C++ › Součet dvou binárních čísel
12. 11. 2012   #166582

Já převádím řetězec na šablonu bitset, která je k tomu přesně určená a je už hotová ve standartu C++.

jurin
C / C++ › Součet dvou binárních čísel
12. 11. 2012   #166562

#1 Dalibor
Pokud to může být C++ tak zkus tohle.

#include <bitset>

#include <string>

typedef std::string   T_String;


template<size_t N> bool binarysum(const char* inNum1,const char* inNum2,T_String &outNum)
{
    typedef std::bitset<N>  T_BitSet;

    T_String s1(inNum1);
    T_String s2(inNum2);
    T_BitSet n1(s1);
    T_BitSet n2(s2);
    T_BitSet n = (n1.to_ulong() + n2.to_ulong());
    outNum = n.to_string();

    return true;
}

int main()

{
    T_String s;
    binarysum<32>("1100100","11001000",s);

    return 0;

}

 

 

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