Laden...

Forenbeiträge von Pako Ingesamt 78 Beiträge

15.05.2009 - 12:09 Uhr

Ich meine Exceptions die unmittelbar von meinem Code geworfen werden, keine darunterliegende vom BS 😃

Grüße
Pako

15.05.2009 - 11:59 Uhr

Hallo,

ich bin auf der Suche nach einem Tool (wenn möglich OpenSource bzw kostenlos) zur Codeanalyse.

Beispielsweise würde ich gerne sehen, an welchen Stellen Exceptions geworfen werden die ich nicht behandelt habe.
Möglicherweise ist dies ja auch mit VS-Boardmitteln möglich?!

Meine Umgebung ist VS2008 / C#.

Merci & Grüße
Pako

07.05.2009 - 14:10 Uhr

GetType().GetInterfaces() liefert ein leeres Array zurück.

Habe hierzu das gefunden und bin zum entschluss gekommen das ich das dynamisch so nicht lösen kann 😦.

If GetType().GetInterfaces() does not work, then the COM object is simply not capable of providing a list of the interfaces it supports ahead of time (i.e., it does not implement the COM interface ITypeInfo). Your only option in this case is to try to cast it to interfaces you think it supports. This is because behind the scenes the cast is implemented by calling the COM IUnknown::QueryInterface which requires the caller to know exactly what interface it wants to obtain.

Grüße
Pako

07.05.2009 - 09:26 Uhr

Morgen,

ich hab mir die msdn angeschaut aber ich komme da nicht weiter.

Problem ist, dass es sich bei objMyObject um ein Com Objekt handelt welches mir übergeben und gemarshallt wird. Der Typ ist daher "System.__ComObject". Der BaseType ist "System.MarshalByRefObject".

Ich hab mehrere ComObjekts und möchte an der Stelle eben dynamisch herausfinden um welchen typ es sich handelt. Die verschiedenen konkreten Typen hab ich ja verfügbar - im meinem Beispiel die class xy eben.

Grüße
Pako

06.05.2009 - 17:01 Uhr

Hallo Pako,
Was hast du genau vor? Denn Casten bringt dir nur was, wenn du den Typen auch zur Compilezeit kennst.

Ich will schauen ob ein bestimmtes Interface implementiert ist.
Wenn der Cast klappt ist es implementiert, wenn nicht dann nicht....

zumindest war das mein plan und jetzt schaue ich mir die msdn an.

Danke für die 2 extrem schnellen antworten.

Grüße
Pako

06.05.2009 - 16:49 Uhr

Hallo,

wie kann ich ein Object casten wenn ich den gewünschten Typ nur als String vorliegen habe?

So wie im Beispielcode:


//objMyObject ist gegeben
TestClass xy = new TestClass();

String strType = xy.GetType();
(strType)objMyObject;

Grüße
Pako

20.04.2009 - 16:43 Uhr

Hallo,

ich habe eine com assembly gebaut. Funktioniert mittlerweile ganz gut.

Allerdings habe ich ein Problem mit einem comvisible Attribut meines interfaces.


comClass.Object1 Objects
{
    get;
    set;
}

[id(0x60020005), propputref]
HRESULT Documents([in] _Object1* pRetVal); 

Es wird daraus ein propputref generiert.
Meine Schnittstelle bekommt vom Aufrufer das Teil bei byvalue übergeben.

Wie kann ich das in den Griff bekommen ohne den Aufrufer anpassen zu müssen - sprich das teil muss weiterhin per Value übergeben werden.

Grüße
Pako

16.04.2009 - 12:05 Uhr

okay, hat sich ebenfalls erledigt 😉

16.04.2009 - 11:27 Uhr

Grade gesehen, das geht nicht:
MSDN: Vermeiden von Überladungen in ComVisible-Schnittstellen

hmmmmmm ist das eine Einschränkung von C# oder gilt das auch für c++ com DLLs?

Grüße

16.04.2009 - 11:14 Uhr

Hallo,

danke für das Beispiel. Habe das mit dem Marshalling der unmanaged Types hinbekommen.

Ein Problem hab ich nun noch - und zwar mit überladenen Funktionen.
Alle Tutorials und Beispiele die ich gefunden habe behandeln leider keine überladenen Funktionen.

Mein Interface mit überladener Funktion "Function", einmal mit 1 Parameter und einmal Parameterlos und dafür mit Rückgabe:


[return: MarshalAs(UnmanagedType.Interface)]
_myObject Function();

void Function([In, MarshalAs(UnmanagedType.Interface)] _myObject obj);

Generierte TLB:


[id(0x60020009)]
HRESULT Function([out, retval] _myObject ** pRetVal);
[id(0x6002000a),
   custom({0F21F359-AB84-41E8-9A78-36D110E6D2F9}, "Function")]
HRESULT Function_2([in] _myObject * obj);

Offensichtlich habe ich was falsch gemacht beim Überladen denn er benennt die eine Function in Function_2 um.

Sieht jemand den Fehler?

Merci
Grüße

15.04.2009 - 21:09 Uhr

oh ich glaube ich habe mein problem entdeckt 😃

15.04.2009 - 20:28 Uhr

Servus,

Punkte 1 bis 3 hatte ich durchgeführt - der Fehler kam danach dann.

'BSTR*' ist entweder '[out] BSTR*' oder '[out, retval] BSTR*' und entspricht auf C#-Seite 'String' bzw. 'string'.

D.h. ich brauche gar keinen Pointer?

Wenn das stimmt dann wäre ([in, out] long*) eine Funktion die ein ganz normales Long (kein Pointer) erwartet welcher mit OUT gekennzeichnet ist?!

Grüße
Pako

15.04.2009 - 18:33 Uhr

Hallo,

ich habe die Aufgabe eine c++ com dll in c# umzusetzen.

Da werden beispielsweise Pointer auf Objekte anderer Com Server verwendet. Diese werden als Parameter beim Aufruf von Funktionen meines ComServers mit übergeben.

so wollte ich das umsetzen:

public unsafe void DoSomething(andereCOMDLL.Objekt* obj)
{
....
}

Ebenfalls werden Funktionen erwartet die als Rückgabetyp Pointer auf solche Objekte besitzen.

public unsafe andereCOMDLL.Objekt* DoSomething()
{
}

Bei beiden Umsetzungsversuchen erhalte ich folgenden Fehler:

Es ist nicht möglich, einen Zeiger für den verwalteten Typ ("andereCOMDLL.Objekt") zu deklarieren oder dessen Adresse oder Größe abzurufen.

Was mach ich da falsch? 😕
Und welcher Datentyp entspricht ein BSTR* in C#?

Danke!
Grüße
Pako

13.01.2009 - 14:58 Uhr

Hallo,
kann es sein, dass dein Programmcode nicht dem geposteten Code entspricht? Dein Programm müsste nämlich schon früher hängen 😉.

   
for (int x = 0; x <= tabControl.TabPages.Count; x++)
{
  if (tabControl.TabPages[x].Text.Contains.....

Grüße
Pako

26.02.2008 - 16:25 Uhr

hab gerade ne andere lösung gefunden.
merci dennoch.

grüße
pako

26.02.2008 - 13:03 Uhr

Möglich das du den Title des Tooltips entfernt hast? Wenn ich dem Title nen nullstring gebe passiert das bei mir auch 😉

26.02.2008 - 12:01 Uhr

Servus!

Ich hab nen UserControl mit Autoscroll und darin sind ein TabControl (Docking Fill) mit Inhalten.
Der Inhalt einer TabPage ist Beispielsweise ein Webbrowser Objekt welches größer ist als das UserControl selbst -> Scrollbars.

Wenn ich nun auf den Webbrowser klicke dann erhält er den Focus. Gleichzeitig wird aber im Panel nach Links oben gescrollt bzw. die obere Linke Ecke des Browsers auf Position 0,0 des Panels gesetzt.

Ich scrolle also im Panel nach rechts um Inhalte auf ner HTML Seite zu sehen aber wenn ich dann darauf klicke dann isses wieder weg 😦.

Jemand nen Ansatzpunkt für das Problem? Das UserControl an sich hat ja offensichtlich keine Eigenschaften mit denen ich das beinflussen kann.

Merci
Grüße

03.08.2007 - 10:41 Uhr

ok, encoding ist dann Windows-1252 und es hat geklappt.
Vielen Dank

02.08.2007 - 12:04 Uhr

Hallo,

ich hab mir ein XML Error Log gebastelt und möchte dies gerne als Datei abspeichern.

XML Doc erzeugen, root node hinzufügen und der dann die Errors .

XmlDocument myXMLErrorLog = new XmlDocument();
XmlNode myRootNode = myXMLErrorLog.CreateElement("Errors");

//für jeden Fehler:
XmlNode error = myXMLErrorLog.CreateElement("error");
XmlNode errorText = myXMLErrorLog.CreateElement("Text");
errorText.InnerText = "Fehlertext";

error.AppendChild(errorText);

Speichern:

   
XmlWriterSettings xWriteSett = new XmlWriterSettings();
xWriteSett.Indent = true;
          
XmlWriter xWriter = XmlWriter.Create(pathAndFile, xWriteSett);
xWriter.WriteRaw(myXMLErrorLog.ToString());
myXMLErrorLog.Save(xWriter);
xWriter.Close();

Nun speichert der jedes Sonderzeichen in ASCII anstatt unicode 😦 !!
Der Writer hat die XML eigenschaften wie encoding Type = "utf-8" gesetzt aber das tut dennoch nicht...was mach ich falsch?

Danke!
Grüße

02.07.2007 - 23:00 Uhr

ok dann werde ich den code mal mit passenden ausgaben bestücken und das aufm zielrechner analysieren %) und hoffentlich feststellen können wie das zustande kommt...merci

02.07.2007 - 14:49 Uhr

die rechner haben alle WinXP Version 2002 mit SP2 drauf und .NET Framework der Version 2.0.....alles haargenau gleich 😦.

Das mit dem Spy++ geht nicht so einfach da die Zielrechner kein VS haben. Oder kann ich den Spy auch einfach kopieren?

Grüße
Pako

01.07.2007 - 14:32 Uhr

Hallo,
Ich suche mir ein Fenster hwnd. Ist das Fenster gefunden dann gehts mit folgendem Code weiter:


System.IntPtr ptrChild = GetWindow(hwnd, GW_CHILD);
            while (!ptrChild.Equals(IntPtr.Zero))
            {
                if (ptrChild == FindWindowEx(hwnd, IntPtr.Zero, "ComboBox", null))
                {

                    SendMessage(ptrChild, (int)WinAPI_WM.CB_SETCURSEL, (IntPtr)2, (IntPtr)0);
                    SendMessage(ptrChild, (int)WinAPI_WM.WM_LBUTTONDOWN, (IntPtr)2, (IntPtr)0);
                    SendMessage(ptrChild, (int)WinAPI_WM.WM_LBUTTONUP, (IntPtr)2, (IntPtr)0);
                }
                else
                {
                    ptrChild = GetWindow(ptrChild, GW_HWNDNEXT);
                    Console.WriteLine("else: " + ptrChild.ToString());
                }
            }

Das Fenster hwnd hat 5 Child Elemente. Eines davon ist eine Tab Control mit vielen Knöpfen drinne und eins ist eine Combobox (die einzige auf dem fenster). Die Combobox suche ich also und um ihre Selektrierung zu ändern (1 mal durch Setcursel und danach nochmal nen mausklick drauf absetzen).

Soweit so gut ! Funktioniert an dem Rechner an dem der Code geschrieben wurde und an allen weiteren meiner Entwicklungskisten.... aber auf dem Zielrechner gehts nicht GRRRRRRRRRRRR !!!!! Auf unterschiedlichen Zielrechnern geht der Code hin und selektiert den zweiten Knopf in der TabControl... ich bin völlig ratlos weil ich auf den Zielkisten nicht debuggen kann.

Hab ich nen Fehler im Code oder warum ist das so?

Danke
Grüße
Pako ratlos

25.06.2007 - 09:31 Uhr

Laut http://www.regular-expressions.info/lookaround.html
ist ein negativer Lookahead


"q(?!u)" 

und ein negativer Lookbehind wie du ihn mir vorgeschlagen hast (@herbi)


"(?<!a)b"

Da stelle ich mir die Frage was denn das '<' im Lookbehind soll. Wenn ich das weg lasse oder irgendetwas hinschreibe scheint der Ausdruck unverändert zu funktionieren?!

Danke
Grüße

24.06.2007 - 18:01 Uhr

lol ok, dann entferne ich den code zum löschen der doppelten \ mal wieder grins.

Merci
byby

24.06.2007 - 16:30 Uhr

okok, also der Backslash muss im Regex selbst escaped werden...

also klappt es mit @"(?<!\)/" anstatt @"(?<!)/".

Also er macht dann aus 123/233/433 zwei Tokens

  1. 123\/233
  2. 433

Dieses \ im 1. will ich aber nich 😦. Muss ich da alle Tokens manuell durchgehen und die ersetzen oder kann ich den Nebeneffekt eleganter entfernen bereits in meinem Ausdruck?

grüße
Pako

22.06.2007 - 15:46 Uhr

mein studio und Regex-Lab sagen:

"Nicht genügend )-Zeichen"

Danke

22.06.2007 - 15:11 Uhr

Hallo,

ich habe mir einen Tokenizer mit hilfe String.Split(source, delimiter) gebaut. Allerings ist der delimiter auch an Stellen in meinem String an denen er nicht als Delimiter gedacht ist und deshalb bestitzt er da escape sequenzen.

Kann ich das einfach und elegant durch nen RegEx.Split lösen?? Falls ja, wie müsste der Ausdruck ausschauen?

Delimiter = '/'
Escape Seq = '&#39;

Somit sollen '/' nicht zum Splitten herangezogen werden sondern nur welche mit {0} davor.

Danke
Grüße
Pako

04.09.2006 - 13:49 Uhr

ok, irgendwie krieg ichs doch nicht hin....

this.focus etc etc bringt zwar alles den Focus auf die MDI Child Form aber der benutzer darf trotzdem noch im MDI Parent rumklickern 😦

04.09.2006 - 13:24 Uhr

danke !

04.09.2006 - 12:05 Uhr

wie ShowDialog()...d.h. ich möchte das das Fenster den Focus nicht verlieren kann außer man schließt es.

Die 3 habe ich ausprobiert, die setzen den focus aber verhindern nicht das der benutzer den focus auf ein anderes fenster setzen kann.

04.09.2006 - 09:54 Uhr

Hallo,

wenn ich ein MDI Child aus einem anderen MDI Child aufrufe, wie stelle ich es an, dass das neue Fenster immer den Focus besitzt??

quasi wie ShowDialog()...nur das geht nicht weil die Aufrufende Form ja selbst MDI Child ist 😦.

Danke
Grüße
Patrick

04.09.2006 - 09:51 Uhr

erledigt.... Icon hatte nicht 16*16 Pixel....

01.09.2006 - 15:44 Uhr

Hallo,

  1. ich habe ein MDI Parent Fenster.
    Ganz oben hat das Fenster ein MenuStrip und direkt darunter ein Toolstrip.

Wenn ich nun ein MDI Child Fenster Maximiere dann erscheint sein Logo im MenuStrip der Parent Form ziemlich groß (der MenuStrip wird dann doppelt so hoch).... hat das MDI Child kein Logo so erscheint dieses Standardicon. Wie stelle ich das ab??

Hauptproblem hierbei ist das wenn ich die MDI child form im maximierten Zustand schließe das Programm abstürzt da das Icon disposed wurde und die Mainform es wohl noch aus seinem Menustrip entfernen möchte oder was auch immer.

  1. Wie kann ich ein Fenster aus einem MDI Child Öffnen so das es immer im Vordergrund ist. mdiParent = this geht nicht da eine Form ja nicht MDI Child und MDI Container gleichzeitig sein kann. ShowDialog() geht auch nicht 😦

danke
Grüße
Patrick

16.08.2006 - 16:55 Uhr

Hallo,

ich muss meine erste Datenbankanwendung schreiben.

Der Benutzer hat die Möglichkeit sich Tabellen und Zeugs u.a. in Datagridviews anzeigen zu lassen.

Ändert er eine Zelle habe wollte ich den CellEndEdit Event verwenden um die Änderung sofort in die Datenbank zu schreiben.

Das ganze geht soweit aber nur wenn der CellEndEdit Event mit einem Focusverlust der Row ausgelöst wurde....d.h. klickt der Benutzer in eine andere Zelle der selben Row dann läuft zwar die Routine los aber die Daten der Row sind unverändert.

Wie sollte ich das am besten umgehen?? Oder soll ich es gar nicht umgehen und als Standard Access verhalten hinnehmen? Irgendwie komme ich damit nicht so klar.

Danke
Grüße
Patrick

10.08.2006 - 13:03 Uhr

Hallo,

ich habe eine Datenbanktabelle in ein Dataset eingelesen.

Das Dataset möchte ich als DataSource in einem DataGridView darstellen.

Nun möchte ich aber einige Columns der DataGridview als ComboBox darstellen in denen ich dem Benutzer die Möglichkeit gebe den Wert der Zelle (aus der Datenbank gelesen, d.h. gebunden an das Dataset) in andere in der ComboBox vorgegebene Werte zu ändern.

Wie stelle ich das am besten an?

Danke
grüße
Patrick

08.08.2006 - 14:22 Uhr

ja ich habe die ganze Zeit im Forum gesucht aber irgendwie habe ich parametriesierte Übergabe mit dem OleDbDataReader benutzt und damit kam ich zuerst nicht klar.

Jetzt funktioniert es. Vielen Dank!!


OleDbCommand myCommand = new OleDbCommand("select * From "+tableName, DBConnector.myConnection);
            
OleDbParameter myParam = new OleDbParameter();
myParam.Value = "Footer 1";
myCommand.Parameters.Add(myParam);
OleDbDataAdapter myAdapter = new OleDbDataAdapter(myCommand);
           
DataSet myDataSet = new DataSet();

myAdapter.Fill(myDataSet, "Test");
return myDataSet;

Wenn ich die Datenbank auf SQL umstellen würde musste ich lediglich den DataAdapter austauschen, korrekt?

Grüße

08.08.2006 - 13:51 Uhr

genau!

OleDbDataAdapter myCommand = new OleDbDataAdapter("select * from "+tableName, DBConnector.myConnection);
DataSet myDataSet = new DataSet();
            
            myCommand.Fill(myDataSet, "Tables");

myCommand greift auf eine Stored Procedure zu und ich muss da einen Parameter übergeben.

08.08.2006 - 13:20 Uhr

ja genau das ist mein problem. wie kann ich parametrisiert aufrufen?

Wenn ich eine SQL Abfrage in der Datenbank speichere und diese Aufrufe dann bekomme ich die Ergebnistabelle der Abfrage übergeben. Das ist allerdings Unsinn wenn ich von den Daten der Abfrage nur die hälfte möchte. Den Parameter welche hälfte der der Daten ich möchte müsste ich dann irgendwie übergeben wenn ich auf die Abfrage zugreife.

grüße

07.08.2006 - 13:35 Uhr

die Datenbank Abfragen sollen in der Datenbank zur Verfügung stehen.
Ich soll in meiner Anwendung keinerlei SQL Commandos abschicken.

07.08.2006 - 12:10 Uhr

mir fällt gerade ein das ich die Variable selbst vor der Abfrage in die Datenbank schreiben könnte und dann als Variable dieses Feld angebe.

Falls es eine elegantere Lösung gibt bitte nennen 😉

07.08.2006 - 12:07 Uhr

Hallo,

ich muss eine Datenbankanwendung schreiben bei der die Abfragen nicht durch meine Anwendung geschehen sondern in der Datenbank enthalten sind.

Erstellt habe ich nun eine Abfragen (Access).
Angenommen ich möchte die Daten nach einer Abfrage noch nach WHERE xxx.Name='Test' sortieren dann wäre Test in ja eine Variable.

Geht das, dass ich dann WHERE xxx.Name='VAR' in die Datenbank schreibe und die Variable übergebe wenn ich die Abfrage ausführe?

Falls ja, wie?
Wenn nicht dann wäre das ja sinnlos wenn ich mir alle Daten der Abfrage in ein Dataset speichere und danach nochmals Filtern muss.

Über eine gute Seite wäre ich Dankbar.

Danke
Grüße
Patrick

03.05.2006 - 21:12 Uhr

nein nicht geschaut und ehrlich gesagt hat mich das auch nicht weitergebracht 😕

03.05.2006 - 17:44 Uhr

Hallo!
wie kann ich denn Applikation Settings dynamisch ansprechen??
Ich meine das global::xxxxxxxxxxxx
das ich den namen der Setting eben nicht hard codiere sondern aus nem String nehmen kann.

Vielen Dank!
Grüße
Patrick

01.05.2006 - 22:03 Uhr

Hallo,

wenn ich in den Applicationsettings Properties (z.B. Text für eine Textbox) speichere funktioniert das. D.h. der Benutzer gibt einen Text in die Textbox ein und beim nächsten Start der Applikation steht der Text noch in der Box.

Nur für die Breite von Listviewspalten funktioniert das nicht. Zumindest nicht ohne das ich beim form close oder so Event das explizit speichere.

Mache ich was falsch oder geht das bei den Spaltenbreiten einer Listview einfach nicht?

Danke
Grüße
Patrick

31.03.2006 - 13:37 Uhr

hallo!
ja, wie gesagt vermute ich auch, dass er einfach nicht nachkommt weil er das zu oft zeichnen muss wenn man den balken zieht.

Schade aber ich werde es dann so lassen.

es sind ca 5-7 Bilder der größe 50 auf 30 Pix. Es verwischt sowohl bei älteren als auch bei neueren rechnern.

Grüße
Patrick

29.03.2006 - 15:14 Uhr

Hallo,

ich habe ein Panel. Dieses Panel hat eine Scrollbar und beinhaltet viele Panels. Jedes dieser Panels hat ein BMP als Image in einer Imagebox.

Wenn ich nun das Parent panel scrolle dann scrollen alle enthaltenen Panels mit ihrem image mit.

Das image verwischt dabei bzw läuft nach. Es scheint als würde er mit dem zeichnen nicht nachkommen?!

Wenn man die Scrollbar mit der hoch/runter taste verwendet oder einfach mit einem Klick die Position verändert ist alles ok. Nur eben wenn man sie gedrückt hält und hoch und runter fährt.

Woran kann das liegen??

Danke!
Grüße
Patrick

09.03.2006 - 11:56 Uhr

GRML. Natürlich sollte man überprüfen ob sie registriert ist bevor man versucht sie zu verwenden (bei start der Anwendung).

Funktioniert einwandfrei.

Vielen Dank

Grüße

09.03.2006 - 11:53 Uhr

Hallo!

Die DLL muss registriert sein!

Meine vorgehensweise, bei start des programmes zu überprüfen ob sie registriert ist oder nich funktioniert so nicht.

Grund: Anwendung startet erst gar nicht wenn die dll nicht registriert ist.

Hat jemand nen Vorschlag wie ich das problem lösen kann ohne die DLL per hand registrieren zu müssen oder ein Setup für die anwendung zu erstellen?

Grüße
Patrick

08.03.2006 - 15:26 Uhr

Hallo!
Ich habe eine Listbox. Die fülle ich durch eine rekursive dateisuche...dabei werden einige eventuell gefundene ordner abgeglichen mit einer Liste (string array) von pfaden und in die Listbox eingetragen und in die Liste hinzugefügt.

Hatte einen Bug in der positionierung der Pfade in dem string Array.

Nichts desto trotz bekam ich bisher immer die Fehlermeldung:

system.exception
Complus Exception
Fehlercode 532459699

Dieser Code kam nur dann, wenn die Listbox zu beginng leer war und ich ich den code hab laufen lassen. Beim tracen durch den code kam der Fehler nie (konnte deshalb auch nicht nachvollziehen an welcher stelle er entstand). Ebenfalls kam er nie wenn in der Listbox bereits ein Item vorhanden war.

Nachdem ich den Bug mit der Listbox entfernt hatte war auch die Fehlermeldung weg. Trotzdem würde mich interessieren wie es dazu kam da der Code rein gar nichts mit irgendwelchem com komponenten oder so zu tun hatte und erst recht weil der Positionierungsfehler kein grund war eine Exception auszulösen. Über google hab ich nix gescheites gefunden.

Jemand eine Idee???

Danke
Grüße
Patrick

08.03.2006 - 09:14 Uhr

ok, ich werde es damit versuchen. Wobei ich mich wundere über den befehl "regsvr.exe".

Zum registrieren von DLLs verwende ich immer regsvr32.exe

Gibts da einen unterschied?? Ich glaube ohne das 32 funktioniert an meinem Rechner das registrieren von dlls (per console) gar nicht.

Grüße
Patrick