raiserle
-
Gesamte Inhalte
95 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Beiträge von raiserle
-
-
Ok, hatte ich nicht gelesen. Danke.
Aber: Dann müsste doch die Exception immer auftreten? Aber das oben beschriebene tritt nicht immer auf.
-
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
-
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
-
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.
@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?
-
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.
-
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.
-
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
-
Dieser Benutzer (murat1895) kennt leider keine Verhaltensregeln.
A) Danke
Source
C) Lösung
@Felix91: 100% das Schwarze!
-
Ich verweise nochmals auf den Post von mir:
http://www.fachinformatiker.de/datenbanken/155518-lieber-c-java.html#post1398696
Die Sprache ist vollkommen HUPE! Problem -> Lösung -> Ziel!
-
routing angemacht?
-
Es spielt keine Rolle, welche Sprache.
Die Anforderungen werden sich immer wieder ändern - und somit auch die zu benutzende Sprache.
(o.t.: Datenbanken?)
-
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.
-
Danke für den Tipp.
Also Einfluss auf die XML-Struktur habe ich nicht.
Aber es geht auch ohne .
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
-
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
-
Vielleicht gibt es einen Sinn. Aber dazu muss dr.dimitri mal was sagen. Und nicht einfach nur was in den Raum stellen.
-
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!
-
...... 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 ].
Int = Int
-
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.
-
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
-
@flashpixx : Kurz und knackig
Oder
.....
Warum immer das Rad neu erfinden....
-
Bsp so...
als QnD-Ansatz aus der Praxis und geht!
for /F "delims=*" %%a in ('reg query "HKEY_USERS\%SID%\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles" /v DefaultProfile^|find /I "defaultprofile"') do ( SET ...... )
-
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
-
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
-
Schau mal unter den ODBC-Datenquellen nach, ob deine richtig konfiguriert ist (odbcad32).
Wenn du ein 64Bit-Sys hast, und ein 32Bit Treiber: Aufpassen!
%SystemRoot%\SysWOW64\odbcad32.exe
[PHP] Image wird nicht erstellt / gerendert
in Skript- und Webserverprogrammierung
Geschrieben
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
schaffen. Füge dies ebenfalls in deinen Code ganz oben ein.