none
[UnmanagedFunctionPointer] in Compact Framework RRS feed

  • Frage

  • hi,

    is it possible to use [UnmanagedFunctionPointer] in Compact Framework (C#)?

    i got multiple posts by searching google that tell to use it the following way:

    [UnmanagedFunctionPointer(CallingConvention.Winapi)]
    private delegate void Function(bool parameter);

    but when i trie to compile this i recieve the folowwing error:

    error CS0246: The type or namespace name 'UnmanagedFunctionPointer' could not be found (are you missing a using directive or an assembly reference?)

    I'm using the latest Compact Framework version on a Windows CE device.

    Thanks,

    Phil
    Donnerstag, 26. Mai 2011 07:55

Alle Antworten

  • Hallo Phil,

    dies ist ein deutschsprachiges Forum.

    Das UnmanagedFunctionPointerAttribute wird m. W. ab CF 2.0 unterstützt.

    Hast Du den Namespace eingebunden mit

    using System.Runtime.InteropServices;
    
    Weiteres dazu findest Du u. a. im Artikel:  Marshalling data in Compact Framework

     

    Gruß Elmar



    Donnerstag, 26. Mai 2011 08:55
    Beantworter
  • Oh sorry, dann deutsch ;)

    erstmal danke für die schnelle antwort.

    "using System.Runtime.InteropServices;" ist eingebunden....

    habe das ganze zuerst für normales windows geschrieben und dann kopiert... dort funktioniert das ganze.

    Gruß

    Donnerstag, 26. Mai 2011 09:58
  • Hallo,

    da hat mir Google wohl mal wieder was falsches erzählt, leider kann ich hier nicht selbst testen ;-(

    Hast Du das Beispiel aus dem CodeProject - Artikel probiert?

    // Passing function pointer
    
    Delegate d = new ProgressEventHandler(OnProgressChanged);
    
    IntPtr progressChanged = Marshal.GetFunctionPointerForDelegate(d);
    
    int result = SetCallbackFunction(progressChanged);
    

    Die einzige offizielle Dokumenation, die ich finden konnte, wäre:
    Marshaling Delegates as Function Pointers

    Gruß Elmar

    Donnerstag, 26. Mai 2011 10:36
    Beantworter
  • problem ist ja schon dass er beim compilen den fehler bringt. ist auch nicht türkis hinterlegt wie es eigentlich sein sollte.

    es geht wirklich nur um das [UnmanagedFunctionPointer(CallingConvention.Winapi)].

    muss eine funktion zur laufzeit laden.

    in der offiziellen doku wird die dll ja schon vorher angegeben.

    Donnerstag, 26. Mai 2011 10:49
  • ich zeig mal wie das ganze in etwa aussehen soll, bzw für normales windows auch funktioniert hat.

    2. problem ist nämlich dass es auch "GetDelegateForFunctionPointer" nicht gibt...

     

    [UnmanagedFunctionPointe,r(CallingConvention.Cdecl)]

    delegate void InitFunc(bool firstTime);

    InitFunc FunktionInit;

     

    --- ---- ---

     

    IntPtr handle = LoadLibrary(DllPfad);

    IntPtr funcPtr = GetProcAddress(handle, FuncName);
     if (funcPtr != IntPtr.Zero)
    {
        FunktionInit = (InitFunc)System.Runtime.InteropServices.Marshal.GetDelegateForFunctionPointer(funcPtr, typeof(InitFunc));
    }

     

    Gruß

    Donnerstag, 26. Mai 2011 12:45
  • Hallo Phil,

    laut Late loading a native DLL in C# .NET 2.0CF funktioniert es gar nicht.

    Wie sich dies mit den Aussagen des Artikels deckt kann ich nicht nachprüfen,
    da ich den Aufwand eine Umgebung aufzusetzen derzeit nicht auf mich nehmen will.

    Stelle ggf. die Frage bitte neu im englischsprachigen Foren-Bereich:
    http://social.msdn.microsoft.com/Forums/en-US/category/smartdevicedevelopment

    Gruß Elmar

    Donnerstag, 26. Mai 2011 18:07
    Beantworter