Hi herbivore!
Wo finde ich in dem von dir genannten Thread eine Lösung für mein Problem?
Mein erster Gedanke war das Programm als WindowsApplication zu erstellen und wenn es von der Kommandozeile mit Parametern gestartet wird mit AttachConsole mich mit der Kommandozeile zu "verbinden". Dies funktioniert auch prinzipiell, jedoch zeigt mir die Kommandozeile sofort nach dem Start von meinem Programm die Eingabeaufforderung für den nächsten Befehl an und wartet nicht - wie bei Konsolenanwendungen auf das Ende meines Programmes. Dadurch kommt die Ausgabe meines Programmes durcheinander.
Der umgekehrte Weg, mein Programm als Konsolenapplikation zu erstellen und mittels FreeConsole die Konsole bei Bedarf zu schließen funktioniert auch nicht, da die Konsole für kurze Zeit angezeigt wird.
@rizi
Sicher kann ich GUI.Hide() aufrufen bzw. die Form erst gar nicht anzeigen. Jedoch habe ich - wie oben bereits geschrieben - noch immer das Problem, dass die Konsole beim Starten meines Programmes kurz sichtbar ist.
@herbivore
Dann nenne mir doch einmal deine relevanten Treffer...
Vielleicht hast du mich auch einfach nur falsch verstanden. Das Problem ist nicht bei Subsystem:Windows eine Konsole zu erzeugen bzw. bei Subsystem:Console die Konsole zu schließen.
Mein Problem sind die bereits erwähnten "Unschönheiten" bei diesen Lösungen.
Lg
Hi herbivore!
Die Themen die du meinst behandeln wie man in einem Windowsprogramm eine zusätzliche Konsole erzeugt.
Wie das funktioniert ist mir bewusst und auch gar nicht Teil meiner Frage.
Hallo!
Ich versuche ein GUI Programm zu erstellen, das bei Übergabe von Parametern auf der Kommandozeile ohne GUI arbeitet? Wenn keine Parameter übergeben wurden, soll das Programm ein GUI anzeigen.
Mein erster Gedanke war das Programm als WindowsApplication zu erstellen und wenn es von der Kommandozeile mit Parametern gestartet wird mit AttachConsole mich mit der Kommandozeile zu "verbinden". Dies funktioniert auch prinzipiell, jedoch zeigt mir die Kommandozeile sofort nach dem Start von meinem Programm die Eingabeaufforderung für den nächsten Befehl an und wartet nicht - wie bei Konsolenanwendungen auf das Ende meines Programmes. Dadurch kommt die Ausgabe meines Programmes durcheinander.
Der umgekehrte Weg, mein Programm als Konsolenapplikation zu erstellen und mittels FreeConsole die Konsole bei Bedarf zu schließen funktioniert auch nicht, da die Konsole für kurze Zeit angezeigt wird.
Irgendwie muss es aber doch gehen, da ich schon einige Programme so arbeiten hab gesehen.
Lg
Probier mal
[DllImport("foo.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
int GetRecord(uint uiRecordCount, out uint pulRecordId, out string ppName, out string ppUser, out string ppGroup, out string ppKeyword);
Da brauchst du kein "Main-Class" Attribut, die zu ladende Klasse wird bei einem Midlet durch "MIDlet-1: GameTracker, GameTracker.png, gametracker.GTMIDlet" definiert.
Btw.: Dir ist schon bewusst, dass es sich hier - zumindest laut Manifest - um ein Midlet für die Jave ME Runtime handelt.
Hi,
es sollte aberclr.Matrix44 = opacity / 100.0f;
(es ist ja RGBA und A=Alpha is der 4te Wert)
sein.
Schon, nur in der Informatik beginnt man bei 0 zu zählen...
Hi!
Bitmap bitmap = ...
ColorMatrix clr = new ColorMatrix();
clr.Matrix33 = opacity / 100.0f;
ImageAttributes attributes = new ImageAttributes();
attributes.SetColorMatrix(clr);
Rectangle rect = new Rectangle(0, 0, img.Width, img.Height);
e.Graphics.DrawImage(img, rect, 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, attributes);
Du könntest auch Attribute verwenden. Diese kannst du abfragen, ohne ein Objekt zu erzeugen.
lg,
Georg
#define rotr8(x,n) (((x) >> ((int)(n))) | ((x) << (8 - (int)(n))))
#define rotl8(x,n) (((x) << ((int)(n))) | ((x) >> (8 - (int)(n))))
Ich habe IDA Pro verwendet.
Dein Debugger-Schutz ließ sich sehr leicht umgehen - einfach den Exit-Zweig ausnopen...
Allerdings hat mir das Debuggen eher wenig gebracht, da erstens dein Programm sehr klein und somit der Programmablauf ersichtlich war, und zweitens mir der Debugger auch nur die Register anzeigen hat können. Somit half eh nur Assembler Code und Funktionsaufrufe analysieren.
Btw.: Was für einen Compiler hast du verwendet? 9KB Codesize habe ich bisher nur immer ohne CRT erzielt.
Lg,
Georg
Hi,
[DllImport("winmm.dll")]
public static extern bool PlaySound(String lpszFileName, IntPtr hModule, uint dwFlags);
Oder du verwendest den System.Media.SoundPlayer.
lg,
Georg
4096 wird wohl die Größe der PageSize von Windows sein.
Du sollst ja eine Exception werfen. =>Einfach eine Win32Exception werfen und zuvor das GetLastErrorAttribute bei deinen Funktionen setzen.
@0815Coder
Genau das macht doch schon Collection<T>.
Warum alles neu erfinden? Wenn du von Collection<T> erbst, gibt es 4 Methoden(Insert,Remove, Clear, Set) die du überschreiben kannst und dort deinen event feuern kannst. Einfacher gehts wirklich nicht mehr.
Bei der DCB Struktur musst du zuvor die Größe setzen.
Es wäre wohl hilfreich den Fehlercode abzufragen =>Win32Exception
Deine Plugins müssen von MarshalByRefObject erben. Die Links die NeuroCoder gepostet hat, sind wirklich sehr zu empfehlen.
Original von FZelle
Geht viel einfacher.
Das Interface IList<T> einbinden und implementieren.
Naja wenn du meinst...
Ich finde es fehleranfällig und umständlich alle Methoden erneut zu implementieren.
So schwer ist das mit den Events auch wieder nicht.
Einfach von CollectionBase bzw. Collection<T> ableiten und in den entsprechenden protected Methoden den Event auslösen.
die ref bzw out Schlüsselwörter sind dein Freund.
Eine Möglichkeit wäre über die WinApi mittels LoadLibrary die Dlls zu verwenden. Ich würde aber eher zur Lösung von Fabian tendieren...
Genau das habe ich ja auch gesagt.){gray}
Habe ich übersehen...
Original von zerli
aber weis nicht genau wie ich die pointer writeData(UCHAR* buf); übergeben kann
writeData(byte[] buf);
Was für einen Treiber verwendest du für den AT90USB?
Z.B.: SourceGrid. War das Erste in der Liste.
Aber es kommt natürlich auch immer auf den Funktionsumfang an. Wenn du nur eine spezielle Lösung brauchst geht es vermutlich auch kompakter.
Du erstellst ja auch jedesmal einen neuen FileSystemWatcher.
Im Prinzip nichts anderes als eine Pluginarchitektur.
=>Plugin-Programmierung
oder bei www.codeproject.com suchen.
myWatcher.EnableRaisingEvents = false;
sollte funktionieren.
lg
Wenn dein Vorhaben außer der Syntax nix mit Events zu tun hat, würde ich eine Add/Remove-Methode erstellen und die Objekte in einer List<T> speichern.
Naja ein einfaches Dateisystem wäre Fat32. Nur dass du statt einer ganzen Partition diesmal nur eine Datei hast.
Einfacher und schneller:
public string ToHex(byte value) {
return String.Format("{0:X2}", value);
}
Ich will dich ja nicht demotivieren, aber das letzte GridView, das ich auf www.codeproject.com gesehen habe hatte ca. 500KB an Sourcecode...
Versuch mal das DataGridView deinen Wünschen anzupassen. Du kannst die Styles ändern, von DataGrid bis ListView Style, etc. Ist wesentlich einfacher als ein Neues GridView zu entwicken.
So, folgendes funktioniert. Ist aber ziemlich unschön. Also frag lieber mal den Programmierer der Dll ob er nicht die Aufrufkonventionen ändern will. Es soll ja Leute geben die nicht Delphi verwenden...
Abgesehen davon wird der Speicher des Ergebnisses nicht mehr freigegeben.
#include <stdio.h>
#include <windows.h>
int main() {
char *(__fastcall *init)(void);
char *(__fastcall *decrypt)(char *);
HMODULE hModule;
char *result;
char *tmp = "http://dxp.divxvid.org/233187674e780c0e15215212b57588e7.html";
hModule = LoadLibrary("dxp.divxvid.org.dll");
if (hModule == NULL) {
puts("LoadLibrary failed.");
return GetLastError();
}
init = (char *(__fastcall *)(void))GetProcAddress(hModule, "init");
if (init == NULL) {
puts("GetProcAddress failed.");
return GetLastError();
}
decrypt = (char *(__fastcall *)(char *))GetProcAddress(hModule, "decrypt");
if (decrypt == NULL) {
puts("GetProcAddress failed.");
return GetLastError();
}
result = (*init)();
puts(result);
_asm {
mov eax,tmp
call decrypt
mov result,eax
}
//result = (*decrypt)(tmp);
puts(result);
FreeLibrary(hModule);
return 0;
}
#include <stdio.h>
#include <windows.h>
int main() {
char *(__fastcall *init)(void);
char *(__fastcall *decrypt)(char *);
HMODULE hModule;
char *result;
hModule = LoadLibrary("dxp.divxvid.org.dll");
if (hModule == NULL) {
puts("LoadLibrary failed.");
return GetLastError();
}
init = (char *(__fastcall *)(void))GetProcAddress(hModule, "init");
if (init == NULL) {
puts("GetProcAddress failed.");
return GetLastError();
}
decrypt = (char *(__fastcall *)(char *))GetProcAddress(hModule, "decrypt");
if (decrypt == NULL) {
puts("GetProcAddress failed.");
return GetLastError();
}
result = (*init)();
puts(result);
result = (*decrypt)("http://dxp.divxvid.org/233187674e780c0e15215212b57588e7.html");
puts(result);
FreeLibrary(hModule);
return 0;
}
Die Decrypt-Funktion funktioniert auch nicht.
Leider sind die Borland Register Aufrufkonvention und die MS fastcall Aufrufkonvention nicht kompatibel.
Siehe z.B.: www.wummy.org/downloads/fastcall.pdf
Wie greifen die Server auf die XML-Datei zu, bzw. wo befindet sich die Datei?
Original von Programmierhans
Ist dies nicht Family statt Assembly ?
Nein, Family ist protected, Assembly ist internal; Hab es am Konstruktor ausprobiert.
Ich habe das Problem jetzt gelöst 😉
ich habe CodeTypeDeclaration.TypeAttributs einfach zurückgesetzt(Auf AutoLayout). Jetzt wird keine Sichtbarkeit angezeigt, somit ist die Klasse internal. Warum es anders nicht funktioniert hat ist mir aber trotzdem ein Rätsel...
Die Beschreibung zu CS1527 sagt folgendes:
Namespace elements cannot be explicitly declared as private, protected, or protected internal
Type declarations in a namespace can have either public or internal access. If no accessibility is specified, internal is the default.
Somit sollte internal funktionieren.
resgen verwendet, soweit ich gesehen habe, ebenfalls CodeDom zum Erzeugen von StronglyTyped Ressourcen-Klassen. Und diese sind ebenfalls internal. Somit müsste es irgendwie funktionieren.
Du kannst dir auch mal RexEx anschauen. Damit gehts noch einfacher.
public bool IsValid(string value) {
return !System.Text.RegularExpressions.Regex.IsMatch(value, "[^A-Z0-9]", RegexOptions.IgnoreCase);
}
Ich will die Klasse ja als internal deklarieren und das sollte funktionieren. MemberAttributes.Assembly angewandt auf einen Member der Klasse deklariert Diesen als internal, nur bei der Klasse selber funktioniert es nicht.
File.Create öffnet das File bereits und gibt dir ein Handle zurück. Verwende diesen Stream.
Hallo!
Ich erzeuge mir mit Hilfe von CodeDom den Sourcecode einer Klasse und schreibe diesen in eine Datei. Funktioniert auch alles recht gut, nur mit der Sichtbarkeit der Klasse hapert es.
Egal was ich hier einstelle, die Klasse ist immer public.
Vielleicht habe ich ja etwas übersehen.
lg
CodeDomProvider = new CSharpCodeProvider();
CodeCompileUnit compileUnit = new CodeCompileUnit();
CodeConstructor constructor = new CodeConstructor();
constructor.Attributes = MemberAttributes.Private;
CodeTypeDeclaration resourceClass = new CodeTypeDeclaration("TestClass");
resourceClass.Attributes = MemberAttributes.Assembly | MemberAttributes.Final;
CodeNamespace resourceClassNamespace = new CodeNamespace("TestNamespace");
resourceClassNamespace.Imports.Add(new CodeNamespaceImport("System"));
resourceClassNamespace.Types.Add(resourceClass);
compileUnit.Namespaces.Add(resourceClassNamespace);
using (StreamWriter writer = new StreamWriter("Test.cs", false, Encoding.UTF8)) {
ICodeGenerator generator = codeDomProvider.CreateGenerator();
generator.GenerateCodeFromCompileUnit(compileUnit, writer, new CodeGeneratorOptions());
}
Original von Gepro
ist zwar keine so schlechte idee aber das wird so nichts, dann klappt das alles nicht mehr.
Was funktioniert so nicht? Du kannst ja ein TableLayoutPanel in einem FlowLayoutPanel schachteln, wenn es unbedingt ein FlowLayoutPanel sein soll.
Du könntest ein TableLayoutPanel mit drei Zellen verwenden. Bei der Zelle Links verwendest du Align left, bei der in der Mitte Center und bei der rechts right.
=>p/invoke
z.B.:http://msdn.microsoft.com/msdnmag/issues/03/07/NET/