WebHU - Programozási kérdések és válaszok

Hogyan hívjunk fel nem menedzselt C++ DLL-t CString hivatkozással

A VS2010 használatával C++/CLI burkoló DLL-t építek egy nem felügyelt C++ DLL köré, amely MFC CStrings-t használ nyilvános felületén. A nem felügyelt C++ DLL tartalmaz egy osztályt, amelyhez hozzá kell férnem. A problémám az, hogy ez az osztály CString hivatkozásokat használó metódusokat tartalmaz, például:

BOOL GetUnits(eSysOfUnits sysUnit, CString &Unit, Cstring &Format);

A C++/CLI wrapperben így próbálok hozzáférni

BOOL GetUmUnits(eSysU sysunit, String^ %cunit, String^ %format)
{
   GetUnits(sysunit, marshal_as<CString>(cunit), marshal_as<CString>(format));
}

Ez ad nekem egy fordítói hibát

C2665: msclr::interop::marshal_as : a 3 túlterhelés egyike sem tudta konvertálni az összes argumentumtípust

A GetUmUnits egy C# űrlapon keresztül érhető el. a szelvényt és a formátumot frissíteni kell a nem kezelt kóddal.

Mit csinálok rosszul, nem lehetséges?


  • Valójában csináltam egy konverziót úgy, hogy a CString cs(cuint) és biztonságos formátum, majd GetUnits(sysunit, cs, cs2) néven konvertálja vissza String^-re a marshal_as használatával. működik. szóval azt hiszem, a saját kérdésemre válaszoltam. De kíváncsi vagyok, biztonságos-e? 26.04.2012

Válaszok:


1

A burkolónak át kell alakítania a kezelt String^ objektumot tényleges CString objektummá, és közvetlenül továbbítania kell. A marshaller nem tudja, hogyan kell CString objektumot létrehozni.

A CString különböző verziói léteznek az MFC különböző verzióiban, ezért ugyanahhoz az MFC-verzióhoz kell kapcsolódnia, amelyet a nem felügyelt DLL-nek csinál egy ilyen létrehozásához.

26.04.2012
Új anyagok

A rádiógomb ellenőrzött eseményének használata a jQueryben
Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

Miért érdemes elkezdeni a kódolást 2023-ban?
01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

🎙 Random Noise #2  – Örökbefogadás és hit
az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..