WinCE DLL mit VS2008 erstellen, aber wie?



  • Hallo Zusammen,

    ich habe eine große Bitte.
    Kann mir bitte jemand die paar Zeilen code in ein VS2008 "C-DLL Projekt für intelligente Geräte" erstellen.

    Der Hintergrund, ich habe ein Win CE 6.0 Device mit einem TFT Touch-Screen
    mit Backlight. Ich habe eine Anfrage an den Hersteller gestellt wie denn das Backlight per Software ein-/ausgeschaltet werden kann. Daraufhin habe ich
    nur den folgenden C-Code bekommen und keine fertige DLL die ich einfach
    nutzen kann. Jetzt muss ich die DLL selbst erzeugen.

    Ich habe leider keine Ahnung von C und kann deshalb nicht einmal das
    Projekt erzeugen für die DLL.

    Das Device hat einen X86 Cortex CPU.
    Von Microsoft habe ich mir nur das STANDARD_SDK500 gesaugt und installiert.
    Ich hoffe das reicht auch um die DLL für das Device zu erzeugen. Falls
    nicht, sagt mir bitte was ich noch dazu benötige.

    Meine Anwendung für das Device ist in C# geschrieben.
    In der DLL müssen also die zwei Methoden BackLightON und BackLightOFF
    exportiert werden.

    Besten dank schon mal für die Hilfe.
    Gruß Kostas

    In c# werden die exportiere Methoden dann so eingebunden:

    public static class Backlight
        {
    
            [DllImport("Backlight.dll", EntryPoint = "BackLightON", SetLastError = true)]
            public extern static void BackLightON();
    
            [DllImport("Backlight.dll", EntryPoint = "BackLightOFF", SetLastError = true)]
            public extern static void BackLightOFF();
    
        }//class Backlight
    

    Der Ansi-C Code für die DLL vom Hersteller des Devices.

    #include "stdafx.h"
    
    unsigned char inportb(short addr)
    {
      unsigned char cValue;
      _asm
      {
        mov dx, addr
        in  ax, dx
        mov cValue, al
      }
    
      return cValue;
    }
    
    void outpourtb(int addr, unsigned char val)
    {
      __asm
      {
        push edx
        mov  edx, DWORD PTR addr
        mov  al,  BYTE PTR val
        out  dx,  al
        pop edx
      }
    }
    
    void BackLightON()
    {
      // Set register 4AH bit1 to 0 to enable GPIOB
      outportb(0x3d4, 0x4a);
      unsigned c = inport(0x3d5) & 0xfd;
      outportb(0x3d4, 0x4a);
      outportb(0x3d5, c);
      // Set register 48H bit1
      outportb(0x3d4, 0x48);
      c = inport(0x3d5) | 0x02;
      outportb(0x3d4, 0x48);
      outportb(0x3d5, c);  
    }
    
    void BackLightOFF()
    {
      // Set register 4AH bit1 to 0 to enable GPIOB
      outportb(0x3d4, 0x4a);
      unsigned c = inport(0x3d5) & 0xfd;
      outportb(0x3d4, 0x4a);
      outportb(0x3d5, c);
      // Clear register 48H bit1
      outportb(0x3d4, 0x48);
      c = inport(0x3d5) & 0xfd;
      outportb(0x3d4, 0x48);
      outportb(0x3d5, c);  
    }
    


  • Ich bezweifle ganz schwer, dass Du in Windows CE eine solche Portausgabe einfach so machen kanst. Dazu musst Du IMHO einen Treiber schreiben. Aus einer normalen User-Mode DLL geht das IMHO nicht.



  • Martin Richter schrieb:

    Ich bezweifle ganz schwer, dass Du in Windows CE eine solche Portausgabe einfach so machen kanst. Dazu musst Du IMHO einen Treiber schreiben. Aus einer normalen User-Mode DLL geht das IMHO nicht.

    Danke für die Antwort.
    Ich habe keine Ahnung ob das geht, das Stück Code habe ich vom Hersteller.
    Falls ich dafür einen Treiben benötigen würde, währe das Projekt ernsthaft
    gefährdet! Umso dringender muss ich es versuchen ob es aus einer "normalen"
    DLL funktioniert.

    Wüstest du jemand der mir den Code in einem VS2008 DLL Projekt packen könnte?
    Ich hoffe das es nicht all zu kompliziert ist.
    Ich bin davon ausgegangen das es schon gehen wird, und hab bereits ein paar Devices bestellt wegen Lieferzeit. Ich werde versuchen die die Bestellung zu stornieren.

    Tausend Dank für die wichtige Info.

    Gruß Kostas



  • Martin Richter schrieb:

    Ich bezweifle ganz schwer, dass Du in Windows CE eine solche Portausgabe einfach so machen kanst. Dazu musst Du IMHO einen Treiber schreiben. Aus einer normalen User-Mode DLL geht das IMHO nicht.

    Hallo Martin,
    ich habe beim Hersteller nochmals nachgefragt und er bestätigte mir
    das es gehen sollte.

    Die Antwort:
    Regarding your question, the BackLight.cpp is an example code for you to
    write an application under CE6.0 to control backlight on/off.
    You have to do it on your own.
    There is no any driver to use to enable this function.

    Wie bekomme ich bitte den C-souce in ein VS2008 Projekt und die DLL zu erzeugen.

    Gruß Kostas



  • Register setzen geht mit virtualalloc und VirtualCopy relativ easy in CE. Geht auch innerhalb einer Applikation ohne Treiber oder DLL. Bei tieferliegenden Zugriffen kann man in den KernelMode umschalten (z.B. beim Wechseln der Taktfrequenzen).



  • thenoname schrieb:

    Register setzen geht mit virtualalloc und VirtualCopy relativ easy in CE. Geht auch innerhalb einer Applikation ohne Treiber oder DLL. Bei tieferliegenden Zugriffen kann man in den KernelMode umschalten (z.B. beim Wechseln der Taktfrequenzen).

    virtualalloc und VirtualCopy kenn ich leider nicht das ist vermutlich etwas von c++ meine Anwendung ist in C# geschrieben. Mit C kenn ich mich leider überhaupt
    nicht aus.
    Darf ich dich fragen ob du mir helfen könntest ein C Projekt in vs2008 anzulegen um die DLL zu erzeugen. Möglicherweise stelle ich mir das auch zu einfach vor. Ich habe VS2008 und STANDARD_SDK500 installiert sonst nichts. Ich hoffe das reicht dafür.

    Gruß Kostas



  • Sorry das ich nochmals anfrage,

    kann mir den niemand helfen eine einfache DLL zu erzeguen mit VS2008?

    Ich komme einfach nicht weiter.

    Gruß Kostas


Anmelden zum Antworten