Avatar billede superdan Nybegynder
16. august 2004 - 08:54 Der er 1 kommentar og
1 løsning

marshalling af managed String* til LPCWStr til brug i directshow

Hej.

Jeg arbejder på en audioafspiller i stil med winamp, men har et problem med marshalling, som jeg ikke kender noget særligt til.
Jeg bruger VisualStudio.NET fra 2003 og .NET framework 1.1

Problemet består i at en funktion i directShow fra DX9, skal bruge en pointer til en filsti af typen LPCWStr, men filstien er gemt i et stringarray., da der skal laves forskellige stringoperationer på det.

Mit håb er at der er en der kan hjælpe mig med at læse strengen ind i en LPCWStr variabel, da det vil spare mig for en masse besvær.

Den måde jeg har forsøgt er følgende:

void minFunktion(
[MarshalAs(UnmanagedType::LPWStr)]String* sti_til_fil
)
{
hr = pGraph->RenderFile(stil_til_fil,NULL);
}

//Ideen er at funktionskaldet skal ændre argumentet, men den angiver stadig variablen sti_til_fil som værende en managed string.

/*
Definitionen på RenderFile er:
HRESULT RenderFile(
    LPCWStr lpwstrFile,
    LPCWStr spwstrPlayList
);


jeg er lost. Håber nogen kan hjælpe mig.
På forhånd tak!
Hilsen Dan
*/
Avatar billede superdan Nybegynder
16. august 2004 - 08:57 #1
ved godt at variabelnavnet er forkert i indlægget. Har skrevet koden ind i hånden da den ligger på en anden computer.

{
hr = pGraph->RenderFile(stil_til_fil,NULL);  //skulle stå ..File(sti_til_fil,NULL);
}
Avatar billede superdan Nybegynder
18. august 2004 - 08:17 #2
Jeg har været dygtig og selv fundet svaret.

Mit problem var som sagt at jeg havde en managed System::String* som skulle konverteres til en unmanaged LPCWSTR.

Det gøres på følgende måde:



//skal inkluderes øverst
#include "atlconv.h"
using namespace System::Runtime::InteropServices;

//nedenstående skal stå i en funktion oder so 
USES_CONVERSION;                          //initialiserer A2W
String __gc* MyString=S"managed string";  //en tilfældig managed stringvariabel.

char __nogc* pMystring= static_cast<char*>(Marshal::StringToHGlobalAnsi(MyString).ToPointer());

LPCTSTR MyUnmanagedString=pMyString;

LPCWSTR MyFormatedUnmanagedString=A2W(MyUnmanagedString);

//en hel del af disse punkter kan naturligvis udelades. men er vedlagt for overblikket

// og hermed lukker jeg selv spørgsmålet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester