Zum Inhalt springen

getCppKenntnisse()

Mitglieder
  • Gesamte Inhalte

    57
  • Benutzer seit

  • Letzter Besuch

Über getCppKenntnisse()

  • Geburtstag 31.12.1988
  1. Hi, habs jetzt übers Wochenende rausgefunden... im nachhinein ganz einfach Für alle die mal sowas suchen: 1. COM Klasse erstellen, z.B. <ComClass(MyTestClass.ClassId, MyTestClass.InterfaceId, MyTestClass.EventsId)> _ Public Class MyTestClass #Region "COM-GUIDs" Public Const ClassId As String = "0d3d0928-b502-4eec-bd34-0aeae9044116" Public Const InterfaceId As String = "5eb12215-d9d1-4816-8460-f993ef9bc7b9" Public Const EventsId As String = "0319b2d6-2149-4e19-a3ad-f3de40e7184f" #End Region #Region "Dll-Funktionen" Private Declare Function Beep Lib "kernel32.dll" ( _ ByVal dwFreq As Long, _ ByVal dwDuration As Long) As Long #End Region Public Sub New() MyBase.New() End Sub Public Function MyBeep(Optional ByVal freq As Long = 440, Optional ByVal duration As Long = 1000) Beep(freq, duration) Return Nothing End Function Public Function multipliziere(ByVal zahl1 As Integer, ByVal zahl2 As Integer) As Long multipliziere = zahl1 * zahl2 End Function End Class 2. Project builden. 3. dll - registrieren, mit RegAsm.exe C:\WINDOWS\Microsoft.NET\Framework\v2.x.x>RegAsm.exe "[Pfad]" 4. Aufruf in vbScript: Set obj = CreateObject("MyActiveXControl.MyTestClass") obj.MyBeep MsgBox obj.multipliziere(13, 37) Set obj = Nothing Nur noch als Hinweis, der Name ActiveX-Control ist hier eigtl. falsch - wie ich mittlerweile weiß - wenn überhaupt handelt es sich um eine ActiveX - DLL. Gruß
  2. Hallo Comm., leider ist es ja nicht möglich Funktionen aus DLL-Dateien zu deklarieren. Ich habe aber gelesen, dass es möglich ist sich ein ActiveX-Control zu schreiben, dort die DLL-Funktion zu deklarieren und dann von vbscript aus diese Funktion aus dem activeX-Control aufzurufen. kann mir vllt. jmd. ein Beispiel posten wie man Funktionen aus einem "nonvisible activeX-Control" aufruft? (das control dann zu schreiben dürfte ja kein Problem sein.) mfg
  3. Hallo Comm., Ich habe eine Access Datenbank in welcher unteranderem Word-Dokumente als OLE-Objekte abliegen. Nun möchte ich von Excel aus zum einen neue OLE-Objekte einfügen, bzw. aus Excel herraus diese Objekte öffnen. Kann mir da jemand behilflich sein? Public Function openDoc() Set objWord = CreateObject("Word.Application") Set objWDoc = objWord.Documents modDB.connectDB 'stellt Verbindung mit DB her modDB.query "SELECT Formular FROM Formular WHERE FormID = '1A'" objWDoc = rs.Fields(0) 'rs ist global deklariert, das ist der Recordset 'Hier kommt jetzt die Stelle an der ich nicht weiss wie ich das objWDoc anzeigen lasse 'Mit objWord.Documents.Open objWDoc hat es nicht geklappt (Typen unverträglich, auch objWord.Documents.Open FileName:=objWDoc klappt nicht End Function Public Function saveDoc() Set objWord = CreateObject("Word.Application") Set objWDoc = objWord.Documents 'Hier stelle ich verschiedene Sachen mit dem Dokument an, ändern, füllen usw. modDB.connectDB modDB.query "INSERT INTO Formular('FormID','Name','Formular')" & _ "VALUES('2B', 'Blubb', " & objWDoc & ")" End Function Also eigentlich konnte ich mir schon denken, dass das mit dem Insert nicht so klappt, aber mir ist keine andere Möglichkeit eingefallen. Bin für jede Hilfe, bzw. jeden weiterführenden Link dankbar. mfg
  4. Hallo wulfgang, falls du trotz der collection sache bei einem Array bleiben möchtest: Ich glaub es liegt an der deklaration des Arrays, ich denke es sollte eher so aussehen: Dim Liste(0 To 4) As Class1 'oder Dim Liste(1 To 5) As Class1 'Je nachdem wie du deinen Index setzen möchtest Ich hab gerade keine möglichkeit das zu testen, aber ich glaube bei deiner schreibweise wird wirklich nur ein Element mit Index 5 in dem "Array"(wenn man es dann noch so nennen kann ) erzeugt. Und wenn du dann auf Liste(1) zugreifen möchtest sagt er dass es das Objekt Liste(1) nicht gibt (Objektvariable nicht gesetzt) Ich hoffe es hilft. mfg
  5. Hallo wulfgang, also mir würde dazu einfallen: Wenn die Bedingung erfüllt ist ein Flag setzen setzen und dann nach dem End If nochmal ein If: If bFlag Then Rekursiv = Rückgabewert Exit Function End If hoffe es hilft weiter, mfg
  6. Hallo mpk, eine entsprechende Funktion bringen weder C# noch VB (soweit ich weiss) mit sich, aber du kannst dir mal die api-referenz zu SetDeviceGammaRamp in der gdi32.dll anschauen, das dürfte, denke ich, seinen Zweck erfüllen. mfg
  7. Hallo Comm., Ich möchte in VB.NET die (E-Mail-)Verteiler-Gruppen des aktuellen Benutzers auslesen(die die man sieht wenn man in den Reiter "Mitglied von" bei einem Outlook-Kontakt schaut) Dazu zunächst ganz normal die Verbindung zu Outlook: Dim objOutlook As Microsoft.Office.Interop.Outlook.Application Dim objNSpace As Microsoft.Office.Interop.Outlook.NameSpace Dim objAddressEntry As Microsoft.Office.Interop.Outlook.AddressEntry Dim objUser As Microsoft.Office.Interop.Outlook.ExchangeUser [...] objOutlook = New Microsoft.Office.Interop.Outlook.Application objNSpace = objOutlook.GetNamespace("MAPI") Um nun an die gesuchten Mitgliedschaften zukommen benötige ich zunächst den "Adressen-Eintrag", also den eingetragenen Namen des Users: objAddressEntry = objNSpace.Session.CurrentUser.AddressEntry Bis hierhin funktioniert auch alles noch prima. Jetzt möchte in mein Benutzer-Objekt(objUser) den dazugehörigen Exchange-User holen: objUser = objAddressEntry.GetExchangeUser() Aber bei dieser Zeile hält der Debugger an und sagt: "AccessViolationException: Es wird versucht in geschützten Speicher zu lesen oder zu schreiben..." Nun habe ich mir die Funktion genauer angeschaut, diese Funktioniert nur wenn der gesuchte User auch auf ein Exchange-User referenziert. Das ist bei uns in der Firma 100%ig der fall, aber um sicher zu gehen: MsgBox(objAddressEntry.Type) liefert die Ausgabe "EX" Dann habe ich in verschiedenen Foren gelesen, dass auch eine Null-Referenz diesen Fehler hervorrufen kann, aber auch das kann ausgeschlossen werden, da ich ja schon einen "Type" angezeigt bekomme, außerdem bin ich in dem Moment ja ein User in Outlook. Aber wieder um sicher zu gehen: MsgBox(objAddressEntry.Name) liefert die Ausgabe "Mustermann Max" (also in wirklichkeit natürlich meinen richtigen Namen ;-)) Dann habe ich noch gelesen, dass es die Möglichkeit gibt diesen Fehler zu umgehen/beheben indem man sich eine DLL-Datei schreibt, und diese dann entsprechend registriert. Leider habe ich keine Ahnung von DLL-Dateien, und habe dann folgendes gebastelt: Imports Microsoft.Office.Interop.Outlook Imports System.Runtime.InteropServices Public Class exchangeUser Private objOutlook As Microsoft.Office.Interop.Outlook.Application Private objNameSpace As Microsoft.Office.Interop.Outlook.NameSpace Private objAdressEntry As Microsoft.Office.Interop.Outlook.AddressEntry Private objExchangeUser As Microsoft.Office.Interop.Outlook.ExchangeUser Public Function getExchangeUser() As Microsoft.Office.Interop.Outlook.ExchangeUser objOutlook = New Microsoft.Office.Interop.Outlook.Application objNameSpace = objOutlook.GetNamespace("MAPI") objAdressEntry = objNameSpace.Session.CurrentUser.AddressEntry objExchangeUser = objAdressEntry.GetExchangeUser getExchangeUser = objExchangeUser End Function End Class Das habe ich dann als DLL-Datei erstellt und probiert mithilfe von regsvr32 zu registrieren, das funktioniert aber nicht da der DllServerEinhängepunkt nicht gefunden werden kann. Habe auch in der Projekt Einstellung das Häkchen bei "Für COM-Interop registrieren" gesetzt. Aber wenn ich die DLL dann in mein Projekt einbinde und die funktion getExchangeUser() aufrufe tritt der selbe Fehler wieder auf(hätte mich auch gewundert wenn nicht, da ja haargenau das selbe drin steht) Hat jemand eine Idee wie ich an das Problem sonst noch herantreten könnte? Bin für jede Hilfe dankbar. mfg
  8. hi, erstmal danke für die antworten. dieses problem konnte ich leider nicht lösen, aber ich habs geschafft, dass der umts stick richtig bei linux funktioniert. in der resolv.conf war der richtige nameserver eingetragen (das macht doch der yast?!) naja wie gesagt nun hab ich eine lösung. danke trotzdem comm. mfg
  9. Hi Comm., ich habe vorkurzem auf meinem Notebook Linux suse 11.2 installiert. nun würde ich gerne über meinen windows(XP) rechner ins internet gehen, dazu habe ich mein Notebook an den windows rechner angeschlossen (mit normalem Kabel... also kein CrossOver, denke aber, da beide NIC's relativ neu sind, dass die das selber ausgleichen können?!), bei windows hab ich die verbindung entsprechend eingerichtet (also gemeinsame internetnutzung aktiviert). suse hab ich nun über den networkmanager auf eth0 die entsprechende ip gegeben und standardgateway+DNS server die ip meines xp-clients mitgeteilt. suse+windows zeigen mir auch an dass die verbindung steht, ping funzt auch... aber ins internet komme ich mit suse nicht. hat da jmd. ne idee woran das liegen kann? habe beim networkmanager(suse) eine kabelgebundene verbindung erstellt, xp nutzt eine wlan verbindung ins internet, die gem. nutzung des inet's hab ich auf der lan schnittstelle aktiviert. bin für jede hilfe dankbar... mfg
  10. getCppKenntnisse()

    Suche VBA

    Hi Padoom, @gelang(while)t: Eine Erläuterung zu ActiveCell.Row: Row ist ein Attribut des Objekts ActiveCell, und beinhaltet die Nummer der Spalte der aktuellen Zelle. Anschauen kann man sich das ganze mit: MsgBox ActiveCell.Row Es ist keine Funktion die man aufrufen kann um irgendetwas zu löschen. nun zum eigentlichen Problem des Threads: Die Funktion um Zellen komplett zu löschen (also nicht nur deren Inhalt) heisst Delete. Bei dir macht es glaube ich Außerdem Sinn nicht einzelne Zellen sondern einen markierten Bereich zu löschen. D.h. du markierst den zu löschenden Bereich und rufst dann folgende Funktion auf: Selection.Delete Shift:xlShiftUp xlShiftUp gibt dabei die Richtung an, in welche die "übrigen Zellen" verschoben werden sollen (z.B. auch xlShiftLeft möglich) hoffe das hilft dir weiter, mfg
  11. Hi Jonsc1, Wenn ich jetzt dein Problem richtig verstanden habe, dann sollte das schon die Lösung sein: house house_1; house_1.door_1.open(house_1.getNeedIt) Das ist zwar nicht ganz das was du machen wolltest aber ich denke das sollte gehen, du kannst ja die open funktion dementsprechend schreiben: bool open(std::String inStr){...} bool open(){...} aber die übergeordnete Klasse rausfinden ist eigentlich garnicht nötig weil ja jedes objekt sowieso uniq ist. ich meine damit dass es ja nur ein house_1 gibt und nur ein house_1.door_1 hoffe das hilft dir mfg
  12. hi Rainman1981, ich denke das sollte dir helfen: Range(ActiveCell.Address & ":AA" & Split(ActiveCell,"$")(2)).Select Selection.Copy usw... denke das sollte gehen, markiert in dem Bsp. eben bis zur Spalte AA der aktuellen Zeile, ist aber ungetestet. mfg
  13. Hallo Funfare, wenn du breite von spalten verändern möchtest, zeichne einfach mal ein makro auf, und schau dann in den code rein. btw. bevor du hier en thread aufmachst bitte mal googlen, bei dem suchbegriff "vba spaltenbreite" spuckt das schon soviel treffer aus, dass du damit locker weiterkommen solltest mfg
  14. Hi JDK, habe net so ganz wirklich viel Ahnung von der Materie, aber mir ist da gerade eine Gedanke dazu gekommen, kann man vielleicht dem Link mitgeben wie er das Ding nennen soll wenn es runtergeladen wird, vielleicht ja einfach mit "<a href="blablablubb" NAME="excel1">Excelsheet1</a>" oder vllt. nützt es was wenn du den Excelsheets beim öffnen einen Namen gibst: Sub Workbook_Open() Application.Name = "Excelsheet1" End Sub vllt. hilft dir ja eins davon, mfg
  15. Hi Billy_The_Kid, Also bevor das passiert, solltest du mal fix überlegen! Wie schätzt du denn, als AE im 2 Lehrjahr, die Funktionsweise von GreaseMonkey ein? Was denkst du macht GreaseMonkey? Und was glaubst du woher die "263" in deinem Bsp. kommt? Woher kennt er diese Zahl, ist Sie im HTML-Code der Seite? Aber wie kann man dann Level steigen? Oder ist es möglich, dass bei "var lifeCurrent = parseInt(263);" vielleicht in den Klammern von parseInt eine Funktion steht, welche die 263 als Rückgabewert liefert? Vielleicht ist sie ja in PHP geschrieben, und ist deshalb von einem Client nicht zu sehen weil sie Serverseitig ausgeführt wird. Vielleicht, aber nur vielleicht führt diese Funktion ja einen DB-Zugriff aus, so in der Art: "SELECT LifePoints FROM Data WHERE UserID=AccountName". Net böse gemeint, aber denk halt mal wirklich darüber nach

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...