Zum Inhalt springen

raiserle

Mitglieder
  • Gesamte Inhalte

    95
  • Benutzer seit

  • Letzter Besuch

Beiträge von raiserle

  1. Du könntest auch mal den Code hier rein stellen!

    Wie meine Vorredner schon gesagt haben, kann es am unterdrückten Error-Reporting liegen.

    Schalte dies mal an

    
    error_reporting( E_ALL ); 
    
    
    PHP: error_reporting - Manual Wenn das Bild ausgegeben werden soll - aber vorher schon ein "Warning" kommt, weil zBsp. auf eine Variable zugegriffen wird, die nicht initialisiert ist (kommt es zu so einem Warning) - kann das Bild nicht mehr ausgegeben werden. Dann sollten aber wenigstens die Daten des Bildes als Text ausgegeben werden. Aber wenn dein Browser immer leer bleibt, dann deutet das genau auf das "display_errors = 0" hin, was in der php.ini eingestellt ist. Abhilfe könnte da auch ein
    
    ini_set( 'display_errors', 1 );
    
    

    schaffen. Füge dies ebenfalls in deinen Code ganz oben ein.

  2. Hallo Leute,

    bei mir kommt es bei follgendem Code zu einer "AccessViolationException".

    
    Dim stDMVar_Filter As DllCallsAndTypes.ODK.DataManager.DM_VARFILTER
    
    stDMVar_Filter.dwFlags = DM_VARFILTER_ENUM.DM_VARFILTER_NAME
    
    stDMVar_Filter.dwNumTypes = 0
    
    stDMVar_Filter.lpszConn = ""
    
    stDMVar_Filter.lpszGroup = ""
    
    stDMVar_Filter.lpszName = "*"
    
    stDMVar_Filter.pdwTypes = IntPtr.Zero
    
    Dim ptrVarFilter As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(GetType(DM_VARFILTER)))
    
    Marshal.StructureToPtr(stDMVar_Filter, ptrVarFilter, True) '<-- HIER EXCEPTION
    
    
    Die Deklaration in C von der Struktur ist diese:
    
    typedef struct {
    
        DWORD    dwFlags;
    
        DWORD    dwNumTypes;
    
        LPDWORD pdwTypes;
    
        LPSTR       lpszGroup;
    
        LPSTR       lpszName;
    
        LPSTR       lpszConn;
    
    } DM_VARFILTER;
    
    
    In VB habe ich die Struktur wie follgt angelegt:
    
    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi, Pack:=1)>
    
    Public Structure DM_VARFILTER
    
    
        <MarshalAs(UnmanagedType.U4)>
    
        Public dwFlags As DM_VARFILTER_ENUM '4      004
    
    
        <MarshalAs(UnmanagedType.U4)>
    
        Public dwNumTypes As UInt32         '4      008
    
    
        Public pdwTypes As System.IntPtr    '4      012
    
    
        <MarshalAs(UnmanagedType.LPStr)>
    
        Public lpszGroup As [String]        '4      016
    
        <MarshalAs(UnmanagedType.LPStr)>
    
        Public lpszName As [String]         '4      020
    
        <MarshalAs(UnmanagedType.LPStr)>
    
        Public lpszConn As [String]         '4      024
    
    End Structure
    
    

    Wenn ich die Struktur ausrechne, komme ich auf 24 Byte. Diese werden auch mit

    Marshal.AllocHGlobal alloziert (siehe Bildchen im Anhang).

    Was habe ich nicht beachtet, dass es zu einer Access Violation kommt.

    vG raiserle

    post-60086-14430449909416_thumb.png

  3. Hallo Leute,

    ich habe eine kleine Komponente erstellt. Nun möchte ich zur Designzeit das übergeordnete Assembly, bzw die übergeordnete Form, also dort wo sie eingebettet/genutzt wird, herausfinden.

    Wie das zur Laufzeit geht.. alles klar. Aber wie kann ich das dem Designer beibringen, dass ich mit

    
    System.Reflection.Assembly.GetCallingAssembly();
    
    

    nicht Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll meine - sondern halt mein Assembly.

    vG raiserle

  4. Falsch!

    Das Problem liegt an deinem:

    
    thTest.Abort()
    
    
    Lass mal deinen Thread normal beenden. Dann wird auch der Speicher frei.
    
    //globale variable zum beenden des Thread
    
    Dim thStopThread as Bool
    
    
    Sub dis()
    
        If Not thTest Is Nothing Then
    
            thStopThread = true
    
        End If
    
    End Sub
    
    
    Sub myThread()
    
        While thTest.IsAlive and not thStopThread
    
            Threading.Thread.Sleep(10)
    
        End While
    
        thTest = nothing
    
        thStopThread = false
    
    End Sub
    
    

    Ungetestet - sollte aber funktionieren.

    CreateThread: Remarks lesen

    @Guybrush Threepwood:

    Zeig mir mal bitte wo das steht!

    Windows gibt Speicher nicht frei! Sondern nur, wenn er benötigt wird.

    1. Wird sehr wohl der Speicher freigegeben, wenn der letzte Thraed eines Prozesses beendet wird.

    2. Wird der Speicher auch freigegeben, wenn man ihn über (malloc reserviert) free wieder freigibt.

    zu Net:

    Wie dort steht, war das ein Testfall, um den Speicherverbrauch zu messen/simulieren.

    Also spricht nichts gegen ein GC.Collect

    OT:

    Du solltest bedenken, dass Du in der Regel mit C#/VB.NET sog. managed Code schreibst. Das heißt, dieser Code verhält sich anders als C/C++ - Code. ...

    Ähm... hast du gelesen was sie geschrieben hat. Und hast du dir auch mal die Bilder angesehen?

  5. Und wenn du noch so sehr auf dein XML pochst:

    Du hast doch schön dargelegt, dass CSV schnell runtergehackt ist. Stimmt! - Und genau deswegen wird es eingesetzt.

    Nicht jeder will an seiner Datenstruktur etwas ändern.

    Oder muss gar den Code ändern, weil ein Fehler drin ist.

    Daten müssen nicht transformiert werden.

    Daten die aus einem System/Software kommen sind bekannt - und wie sie in ein anderes System müssen, ist auch bekannt.

    Ich sehe hier den Nutzen nicht. Und dementsprechend die allgm Aussage: CSV geht nicht! als nicht treffend.

    Anwendung!

    Alles was du zu XML gesagt hast, ist richtig:

    Aber weder habe ich unser PDM-System, ERP-System geschrieben, noch habe ich Einfluß, wie die Daten da rauspurtzeln (CSV).

    Aber was klar ist, das ich Bsp: eine Stückliste habe, die nun mal eine feste Struktur hat.

    Die enthaltenen Daten können nur richtig sein. Also PDM -> ERP per csv.

    Oder würdest du dann lieber den Weg gehen, auf den CSV,ex-import zu verzichten - und einen Menschen die Daten übertragen lassen. Denn das wäre dann der einzige Weg.

    Immer auch mal den Anwendungsfall betrachten und nicht allgm. die Aussagen treffen.

  6. Und da haben wir wieder das Problem. Kanonen und Spatzen!

    Super Erklärung, aber:

    Ein Schema anzupassen/erstellen ist also deiner Meinung nach nicht aufwändig - und nicht fehleranfällig?

    Nochmal: Allgm. zu sagen, dass CSV nichts taugt - geht eben nicht.

  7. Kanonen und Spatzen!

    Klar definierte Schnittstelle: Warum soll da keine CSV reichen?

    Es zu allgm. zu sagen, dass CSV ein schlechtes Format ist, um Daten auszutauschen - geht nicht!

    Excel/lib-open-Office/... - Makro wären auch noch möglich ;)

    vG

  8. Typische Anwendung für GPO - sofern Domäne vorhanden.

    Ansonsten geht es auch, dass man die "BATCH" unter dem Kontext des Users mit Adminrechten ausführt.

    Dazu musst du aber noch mehr machen ;), als nur eine Batch schreiben.

    Ich hatte so was bei uns gemacht, da wir hier Samba laufen hatten.

  9. Danke für den Tipp.

    Also Einfluss auf die XML-Struktur habe ich nicht.

    Aber es geht auch ohne :D.

    System.Xml.Serialization ist genau das richtige gewesen.

    Für diejenigen, die auch mal so etwas machen müssen/wollen.

    Diese XML soll gelesen werden - und es SOLL 2 Listen geben (read,write) die jeweils den Type Tag enthalten.

    
    <?xml version="1.0" encoding="utf-8" ?>
    
    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="core_schema.xsd">
    
      <read>
    
        <tag name="TESTVAR1" interval="1000" description="zum testen" />
    
        <tag name="TESTVAR2" interval="1000" />
    
        <tag name="TESTVAR3" interval="1000" />
    
      </read>
    
      <write>
    
        <tag name="TESTVAR1" description="zum testen"/>
    
      </write>
    
    </config>
    
    
    Also der Code in VB!
    
    Sub Main()
    
      Dim xmlClassStructure_to_deserialize As New System.Xml.Serialization.XmlSerializer(GetType(Config))
    
      Dim xml_stream As New System.IO.StreamReader("tags.xml")
    
      Dim config As Config
    
      config = xmlClassStructure_to_deserialize.Deserialize(xml_stream)
    
      xml_stream.Close()
    
    End Sub
    
    
    
    'die benötigten klassen (strukturen )
    
    <System.Xml.Serialization.XmlRoot("config")>
    
    Class Config
    
      <System.Xml.Serialization.XmlArrayItem("tag")>
    
      Public read() As Tag
    
    
      <System.Xml.Serialization.XmlArrayItem("tag")>
    
      Public write() As Tag
    
    End Class
    
    
    Class Tag
    
      <System.Xml.Serialization.XmlAttribute("name")>
    
      Public Property name As String
    
    
      <System.Xml.Serialization.XmlAttribute("interval")>
    
      Public Property interval As UInt32
    
    
      <System.Xml.Serialization.XmlAttribute("description")>
    
      Public Property desc As String
    
    End Class
    
    [/code]

    Nochmal danke für den Tipp! Funktioniert super und ist genau dass - was ich brauche.

    vG Henrik

  10. Hallo Leute,

    ich habe eine XML, die in verschiedenen Elementen immer ein Unterelement namens <TAG> hat.

    Nun habe ich folgendes gefunden....

    Quelle: Einlesen von XML in ein DataSet: Codebeispiel für Visual Basic .NET (VB.NET) und CSharp (C#)

    .....Allerdings darf es nicht zwei gleichnamige Elemente an verschiedenen Stellen im XML-Dokument geben; z.B. darf <Name> nicht Unterelement von <Person> sein und an anderer Stelle im Dokument Unterelement von <Firma>. Die Elementnamen müssen also im gesamten Dokument eindeutig sein.

    Was auch dem Verhalten entspricht, wenn ich die XML versuche in eine DataSet zu lesen (es geht nicht, ich erhalten einen eigenen Table für "tag" ohne zu wissen, ob "read" oder "write").

    Kennt jemand von euch einen anderen Weg, wie man so etwas bewerkstelligen kann - außer: Die XML selbst zu parsen?

    Die Struktur sieht so aus. Und ich möchte nun aus "read" und write alle "tag" auslesen. Zugehörig zu ihrem übergeordneten Element. Mit DataSet geht das leider so nicht.

    
    <xml ......
    
    <config .....>
    
        <read>
    
            <tag name..../>
    
            <tag name..../>
    
        </read>
    
        <write>
    
            <tag name..../>
    
            <tag name..../>
    
        </write>    
    
    </config>
    
    

    vG Henrik

  11. Ich kann es nur wiederholen:

    Niemals einen fachlichen Wert als PK verwenden.

    Sorry, dass ich nochmal drauf rumhacken muss!

    Aber aus welcher fachlichen Literatur hast du diese Aussage (oder nur so ein Ding von: Ich mach das so!). Und vor allem mit welcher Begründung.

    Wenn du eine Behauptung aufstellst, dann solltest du sie auch begründen!

  12. ...... viele Datensätze in der INT(255) in Abteilung hättest und in miterarbeiter nur INT(11) einen Fehler :)

    Nein. Es ist kein Fehler. Dies würde nur bei Varchar usw. auftreten [MySQL :D].

    Int = Int

  13. Ja. Verwende niemals einen fachlichen Wert als Schlüssel. Ändert sich der Abteilungsname hast Du ein Problem, gleiches bei Mitarbeiternummer und SO Nummer. Verwende immer rein technische Werte, die von den fachlichen Werten unabhängig sind. Des weiteren macht es das Handling deutlich einfacher, wenn die PK-Spalte in allen Tabellen immer gleich heißt, z.B. ID.

    Subjektive Meinung! -> ON UPDATE! Des weiteren steht dort überall Nummer.

    Der Mitarbeiter hat das Attribut "Abteilung". Es gibt aber schon die Entität "Abteilung". Soll man dann nicht eher die Abteilung von dem Arbeitsplatz ableiten?

    n:1 -> Mitarbeiter ist in Abteilung <- Nummer von Abteilung rein.

  14. Ich empfehle dir das Konfigurationstool "ferm".

    Dort kann man in einer conf-Datei alles einstellen, was dann zu iptables übersetzt wird.

    Sollte man sich mal vertan haben (ausgesperrt [sSH weg]), ist das nicht weiter schlimm. Wenn man die Konfiguration übernimmt, muss man innerhalb von x-Sekunden mit "yes" bestätigen, dass man diese auch wirklich haben will.

    Sollte also der SSH nicht mehr zu erreichen sein, wird nach x-Sekunden wieder auf die vorangegangene Konfiguration gestellt.

    Wer will (nur weil man einen Fehler gemacht hat) schon in der Serverraum latschen.

    vG Henrik

  15. Ich habe mal für unsere CAD-Abteilung so ein Script geschrieben, welches die Daten aus dem lokalen Arbeitsbereich beim Shutdown sichert .... und alte Daten löscht. Der Auszug, der dich interessiert:

    
    ...
    
    rem anzahl von vorhandenen backups bestimmen
    
    FOR /F "tokens=4 skip=%SKIP%" %%a in ('dir /o-n %LETTER%:\%VAULTBACKUP%\') do (
    
    	IF /I NOT "%%a" == ".." IF /I NOT "%%a" == "." IF /I NOT "%%a" == "bytes" (
    
    		SET /a "COUNT+=1"
    
    		rem echo test\%%a
    
    	)
    
    )
    
    
    rem wenn anzahl von backups größer als maxbackups ist
    
    IF %COUNT% GTR %MAXBACKUP% (GOTO DELOLDVERSION) ELSE (GOTO DELNOTHING)
    
    
    :DELOLDVERSION
    
    rem skip um die anzahl von bleibenden backups erhöhen (werden nicht gelöscht)
    
    SET /a "SKIP+=%MAXBACKUP%
    
    rem verbleibende verzeichnise löschen
    
    FOR /F "tokens=4 skip=%SKIP%" %%a in ('dir /o-n %LETTER%:\%VAULTBACKUP%\') do (
    
    	IF /I NOT "%%a" == ".." IF /I NOT "%%a" == "." IF /I NOT "%%a" == "bytes" (
    
    		SET /a "COUNT+=1"
    
    		rmdir /S /Q %LETTER%:\%VAULTBACKUP%\%%a
    
    	)
    
    )
    
    :DELNOTHING
    
    ...
    
    

    Kann man, wenn man will: auch noch kürzen.

    Grüße

    Henrik

  16. Hi NancyG,

    ich habe ein Problem, mit der Deklaration von Strukturen in VB - und der Dek. einer C-dll.

    Hier der Code aus der Header-Datei.

    Das Zauberwort: Marshal. Wenn ich den Code so sehe - Siemens lässt grüßen!

    Was du machen willst ist: managed mit unmanaged code. Beim .Net ist es so, dass sich Net um den Speicher kümmert, alloziert, freigibt usw... Diese Mechanismen gilt es für diesen Anwendungsfall auszuschalten.

    Ein Stück davon hast du schon drin:

    <StructLayout(LayoutKind.Sequential, Pack:=1)>
    .
    typedef struct tagDM_VARKEYA
    
    {
    
        DWORD       dwKeyType;                                   
    
        DWORD       dwID;                                      
    
        char        szName[ MAX_DM_VAR_NAME + 1 ];                               
    
        LPVOID      lpvUserData;                                 
    
    } DM_VARKEYA, FAR *LPDM_VARKEYA;
    
    [/QUOTE]
    
    
    Sollte so funktionieren:
    
    [CODE]
    
    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi, Pack:=1)> _
    
    Public Class DM_VARKEY
    
        <MarshalAs(UnmanagedType.U4)> _
    
        Public dwKeyType As DM_VARKEY_TYPE
    
        <MarshalAs(UnmanagedType.U4)>
    
        Public dwID As UInt32
    
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=(MAX_DM_VAR_NAME + 1))>
    
        Public szName As [String]
    
        Public lpvUserData As IntPtr
    
    End Class
    
    
    Es fehlt noch die Err_Struct :) :
    
    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi, Pack:=1)>
    
    Public Class CMN_ERROR
    
        <MarshalAs(UnmanagedType.U4)>
    
        Public dwError1 As UInt32
    
        Public dwError2 As UInt32
    
        Public dwError3 As UInt32
    
        Public dwError4 As UInt32
    
        Public dwError5 As UInt32
    
    
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=512)>
    
        Public szErrorText As [String]
    
    
        Sub reset()
    
            dwError1 = 0
    
            dwError2 = 0
    
            dwError3 = 0
    
            dwError4 = 0
    
            dwError5 = 0
    
            szErrorText = ""
    
        End Sub
    
    
    End Class
    
    
    Mit [reset()] kannst du das Objekt schnell wieder leeren. Und hier die DLL:
    
    <DllImport("dmclient.dll", EntryPoint:="DMGetValueA", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.Winapi)> _
    
    Private Shared Function DMGetValue(<[In]()> <MarshalAs(UnmanagedType.LPStruct)> ByVal lpdmVarKey As DM_VARKEY, _
    
                                       <[In]()> ByVal dwItems As UInt32, _
    
                                       <[In]()> ByVal lpdmvus As IntPtr, _
    
                                       <[In](), Out()> ByRef lpdmError As CMN_ERROR
    
                                      ) As Boolean
    
    

    Ich würde dir aber die DMGetValueWait empfehlen. Bei dieser werden die Daten, sofern sie keine Internen Variablen sind, aus der SPS gelesen/synchronisiert. Die (WAIT) erwartet aber eine CallBack-Funktion, die du über DELEGATE realisieren kannst.

    Du solltest darauf achten, dass du überall das gleiche CharSet benutzt. Ich empfehle CharSet.Ansi

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...