Export funkce z C++ do .NET – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Export funkce z C++ do .NET – C / C++ – Fórum – Programujte.comExport funkce z C++ do .NET – C / C++ – Fórum – Programujte.com

 

ingiraxo+15
Grafoman
17. 10. 2012   #1
-
0
-

čau.. předem nevim jestli to spadá do c++/.net spíš obojí...

jde o to, že prostě nevim proč to nejde, pokud třeba dám parametr funkce string/LPCSTR např. mám 

extern "C" __declspec(dllexport) LPCSTR GetString(LPCSTR str)
{
    return str;
}

správně by v C# mělo být:

[DllImport("soubor.dll")]
public static extern string GetString(string str);

problém ale je, pokud zavolám tuhle funkci, tak nastvává problém s PInvoke 

A call to PInvoke function 'Program::GetString' has unbalanced the stack.
This is likely because the managed PInvoke signature does not match the unmanaged target signature.
Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.

Prostě nechápu proč to nejede :/ pokud tam dám int nebo tyhle zakladní typy tak ok, ale string nějak nechce a pritom je plno winapi funkcí, ktery to mají taky... např. FindWindow má 2x LPCSTR a v C# to je jako string a funguje


Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
ingiraxo+15
Grafoman
17. 10. 2012   #2
-
0
-

ještě bych doplnil, že když přidám __stdcall, tak mi to sice nevyhodí chybu, ale app mi hned spadne :(

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
ingiraxo+15
Grafoman
17. 10. 2012   #3
-
0
-

jinak jsem zkoušel snad všechny typy a dělá to pouze u všech textových typů ->

LPCTSTR, LPCTSTR, LPSTR, char*, const char*, Wchar_t*, LPWSTR, LPTSTR, string, wstring

aplikace prostě spadne při zavolání (když použiju __stdcall), pokud ho nepoužuju tak to hodi tamtu vyjímku.. prostě už nevim proc to nejde :/

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Radek Chalupa
~ Redaktor
+1
Super člen
18. 10. 2012   #4
-
0
-

Není to tím že NET stringy jsou v unicode a ty tam používáš ANSI? Zkus tam dát WCHAR*, resp. LPCWSTR.

Radek Chalupa
- vývoj software na zakázku
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC)
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 213.220.211.–
ingiraxo+15
Grafoman
18. 10. 2012   #5
-
0
-

#4 Radek Chalupa
sice jsem to už částečně vyřešil, ale vstupní parametr je vpořádku.. je jedno jestli tam je wide char nebo ne, ale výstupní hodnota vždy hodí chybu

jsem to musel vyřešit tak, že v C# mám deklaraci funkce s návratovým typem IntPtr místo string a pak převést ptr na c# string

myslel jsem al,e že to půjde bez tohodle převodu, proste: string str = GetString("text");

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
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, 45 hostů

Moderátoři diskuze

 

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