Så vidt jeg forstår, er det når man skriver en declaration med dllimport at man bruger MarshalAs. Men jeg bruger et COM objekt tilføjet via "add reference", så jeg skal ikke skrive nogen delclaration.
Det har jeg forsøgt før. Jeg får bare et problem i interfacet man skal deklarere. Her under er source fra en DLL (tager fra et eksempel i en bog) som kompilerer fint, hvor jeg tilføjer en funktion der hedder test. Problemet er, at man i filen angiver in og out variabler med kantede parenteser.
// This file will be processed by the MIDL tool to // produce the type library (RefreshRate.tlb) and marshalling code.
import "oaidl.idl"; import "ocidl.idl";
[ object, uuid(B34EF5CF-7B79-11D0-96FE-002018349816), dual, helpstring("IRefRate Interface"), pointer_default(unique) ] interface IRefRate : IDispatch { HRESULT RefreshRate([in] long HScan, [out, retval] long* retval); HRESULT GetVRes([out, retval] long* retval); HRESULT GetHRes([out, retval] long* retval); HRESULT test([in] byte key[]); <-- Den brokker sig over de kantede paranteser. [ uuid(B34EF5C2-7B79-11D0-96FE-002018349816), version(1.0), helpstring("RefreshRate 1.0 Type Library") ] library REFRESHRATELib { importlib("stdole32.tlb");
det ser ud til at du vil bruge strenge. DU kan derfor buge BSTR istedet for byte[]: HRESULT __stdcall CRefRate::encode(BSTR key, BSTR content, BSTR* encodedContent) { _bstr_t strTemp = content; SysFreeString(*encodedContent ); *encodedContent = strTemp.copy(); }
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.