Zum Inhalt springen

Gateway_man

Mitglieder
  • Gesamte Inhalte

    1.162
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Gateway_man

  1. Wenn ich jedem Nutzer denselben öffentlichen Schlüssel geben würde, könnte er die Kommunikation jedes Clients zum Server mithören. Dann müsste ich vor der asymmetrischen Verschlüsselung die Daten zusätzlich Symmetrisch Verschlüsseln um eine sichere Kommunikation zum Server gewährleisten zu können. Das wäre ein abnormaler Aufwand, deswegen wollte ich einfach aus einem privaten Schlüssel mehrere öffentliche Schlüssel generieren. LG Gateway
  2. Hallo, ich suche aktuell nach einer .NET Klasse die es mir ermöglich aus einem privaten Schlüssel mehrere verschiedene Öffentliche Schlüssel zu generieren. Existiert so was bereits ohne muss ich mir selber einen Algorithmus schreiben der das für mich macht? Mit der Klasse RSACryptoServiceProvider kann man hervorragend ein Schlüsselpaar generieren lassen, jedoch leider immer nur jeweils einen öffentlichen Schlüssel für einen private Schlüssel. Da ich jedoch nicht vor habe allen Nutzern den selben öffentlichen Schlüssel zu geben, ist das ganze recht nutzlos. LG Gateway
  3. Hallo zusammen, ein weiteres mal wende ich mich an euch in der Hoffnung das sich hier jemand mit der Interface Definition Language auskennt. Ich versage momentan an der generierung einer IDL. Die Informationen für die IDL beziehe ich aus einer TypeLib. Das Problem das ich habe ist: Ich finde für manche COM Datentypen nicht die passenden IDL Datentypen. Ich habe mir mal eine Typen Tabelle zusammengestellt (links COM, rechts IDL). Bei allen Einträgen wo MISSING steht, konnte ich keinen passenden Typ finden. Wäre nett wenn Ihr einen Blick drüber werfen könntet. Eventuell fällt euch für den ein oder anderen, noch fehlenden Typen, ein passender IDL Typ ein. VT_I2 = Integer VT_I4 = Long VT_R4 = Float VT_R8 = Double VT_CY = Double VT_DATE = Double VT_BSTR = String VT_DISPATCH = IDLcomIDispatch VT_ERROR = Long VT_BOOL = Byte VT_UNKNOWN = IDLcomIDispatch VT_I1 = Byte VT_UI1 = Byte VT_UI2 = Unsigned Integer VT_UI4 = Unsigned Long VT_I8 = Long64 VT_UI8 = Unsigned Long 64 VT_INT = Long VT_UINT = Unsigned Long VT_VOID = Unsigned Integer VT_HRESULT = HRESULT VT_PTR = MISSING VT_SAFEARRAY = MISSING VT_CARRAY = MISSING VT_USERDEFINED = MISSING VT_LPSTR = MISSING VT_LPWSTR = MISSING VT_RECORD = MISSING VT_FILETIME = MISSING VT_BLOB = MISSING VT_STREAM = MISSING VT_STORAGE = MISSING VT_STREAMED_OBJECT = MISSING VT_STORED_OBJECT = MISSING VT_BLOB_OBJECT = MISSING VT_CF = MISSING VT_CLSID = MISSING VT_VECTOR = MISSING VT_ARRAY = MISSING VT_BYREF = MISSING VT_RESERVED = MISSING VT_EMPTY = MISSING VT_NULL = MISSING VT_VARIANT = MISSING VT_DECIMAL = MISSING LG Gateway
  4. Danke dir perfekt . Hat einwandfrei funktioniert und danke für den anderen Tipp. LG Gateway
  5. Hallo liebe leute, ich versuche seit längerem an die typelib ranzukommen, die an jeder ActiveX/Com Library dranhängt. Diese befindet sich als Resource in der Library. An sich sah eigentlich alles recht gut aus. Er findet die Resource, lädt diese und schreibt diese auch weg. Man kann diese dann auch über LoadTypeLib laden. Ich bin eigentlich nur auf einen Fehler aufmerksam geworden, weil ich die extrahierte Typelib als Import in einer IDL benutzen wollte. MIDL hat bei der Interpretation dann einen "internen" Fehler festgestellt. Testweise hab ich dann mit einer externen Anwendung die Typelib aus der ocx gezogen und musste direkt feststellen, da diese 2KB kleiner war. Mit dieser extrahierten tlb ging das ganze dann auch wunderbar und idl interpreter hat keinen Fehler geworfen. Leider muss ich das auslesen selbst hinbekommen, da eine externe Anwendung nicht in Frage kommt. Könnt ihr euch mal den Code ansehn? Eventuell springt euch der Fehler direkt ins Gesicht . int _tmain(int argc, _TCHAR* argv[]) { vector<Argument> _arguments = QueueParameters(argc, argv); if (ArgumentExists(_arguments, "TlbExp")) { unsigned long size = 0; void* rcData = FCResource(GetValueByKey(_arguments, "Filename").c_str(),GetValueByKey(_arguments, "RCType").c_str(),GetValueByKey(_arguments, "RC").c_str(), size); if (rcData != 0) { fstream ifs; ifs.open(GetValueByKey(_arguments, "Output"), ios::in | ios::out | ios::trunc); ifs.write((char*)rcData, size); ifs.flush(); ifs.close(); delete[] rcData; } else { cout << "Type library export failed! Press any key..." << endl; cin.get(); } } return 0; } //Beispielaufruf FCResource(L"....\test.ocx", L"TYPELIB", 1, size); void* FCResource(LPCWSTR filename, LPCWSTR Type, WORD RC, unsigned long &rcSize) { BYTE* RCdata = 0; HMODULE modul = LoadLibrary(filename); if (modul != 0) { HRSRC rcInfo = FindResource(modul, MAKEINTRESOURCE(RC), Type); if (rcInfo != 0) { rcSize = SizeofResource(modul, rcInfo); HGLOBAL rcHandle = LoadResource(modul, rcInfo); LPVOID pFirstByte = LockResource(rcHandle); RCdata = new BYTE[rcSize]; memset(RCdata, 0 , rcSize); memcpy(RCdata, pFirstByte, rcSize); FreeResource(rcHandle); } else { cout << "Failed to load the resource. Couldn't find the specific resource!" << endl; } FreeLibrary(modul); } else { cout << "Failed to load the library. Couldn't find the specific library!" << endl; } return RCdata; } LG & Danke Gateway
  6. Hallo, das Problem ist bereits größtenteils gelöst. Ich habe jetzt entsprechende Funktionen geschrieben, welche die Funktionsszeiger übergeben (über Pointer welche dann in der Ziel Library wieder zu Delegates werden). Das funktioniert soweit sehr gut. private bool RegisterBeginLoad() { bool lresult = false; try { if (obj != null && beginLoadDel != null) { lresult = (bool)baseType.GetMethod("RegisterBeginLoad").Invoke(obj , new object[] { Marshal.GetFunctionPointerForDelegate(beginLoadDel), typeof(BeginLoadEx) }); } } catch { } return lresult; } Folgende Klasse befindet sich in der Dll die per Latebinding angebunden wird. Diese Klasse kümmert sich um die Auflösung des Pointers. public sealed class LBDelegateEx { #region Properties public IntPtr FuncPtr { get; private set; } public Type SrcType { get; private set; } private Delegate TargetPtr { get; set; } #endregion #region constr public LBDelegateEx(Type type, IntPtr ptr) { SrcType = type; FuncPtr = ptr; if (SrcType != null && FuncPtr != IntPtr.Zero) { TargetPtr = Marshal.GetDelegateForFunctionPointer(FuncPtr, SrcType); } } #endregion #region Destructor ~LBDelegateEx() { TargetPtr = null; SrcType = null; FuncPtr = IntPtr.Zero; } #endregion #region Functions public Delegate AccessDelegate() { return TargetPtr; } #endregion } Das einzige Problem das ich jetzt noch habe ist, das Funktionsargumente nicht referenziert übergeben werden. Kennt sich da jemand aus? Selbst wenn die Funktion mit ref arbeitet funktioniert das nicht. Hier ein Beispielaufruf in der per Latebinding angebundenden Dll. onPrinting.DynamicInvoke(new object[] { tempDir, printerDevice, resolution, dpi, quality, showPreview }); Wenn ich den Wert von tempDir (string) innerhalb der Funktion ändere bekomm ich das nicht mit (da die variablen scheinbar nicht referenziert übergeben werden!). Wie schaff ich es das die Argumente beim Invoken referenziert übergeben werden? LG Gateway [uPDATE] (Resolved!): Was für ein Unsinn. Das ist die Funktion die aufgerufen wird: private bool OnPrintProcessStart(ref string tempDir,ref string printerDevice,ref System.Drawing.Size resolution,ref double dpi,ref int quality,ref bool showPreview) { tempDir = "das ist ein test!"; return false; } Wenn ich die Funktion wie folgt Invoke, wird nicht referenziert: onPrinting.DynamicInvoke(new object[] { tempDir, printerDevice, resolution, dpi, quality, showPreview }); Wenn ich aber alle diese Argumente in ein Object Array verpacke: object[] args = new object[] { tempDir, printerDevice , resolution, dpi, quality, showPreview }; bool lresult = (bool)onPrinting.DynamicInvoke(args); Werden die Argumente referenziert übergeben. Was für ein schwachsinn .
  7. Hallo, ich versuche aktuell verzweifelt und erfolglos einen Funktionszeiger per Latebinding zu generieren. Er steigt jedesmal bei "CreateDelegate" mit folgender Fehlermeldung aus: "Fehler beim Binden an die Zielmethode." (Noch nichtssagender geht es nicht). Das einzige was ich noch erhalte ist die Hresult Nummer (-2147024809) mit der ich aber auch nichts herausgefunden habe. Nachfollgend noch der enstprechende Codepart. Das zweite Codesnippet stammt aus der dll, welche per Latebinding angebunden wird. (Dort ist auch das Delegate definiert!). private bool CreateDelegates() { bool lresult = false; try { if (interopAssemb != null) { bool success = true; Type tempType = null; MethodInfo mInfo = null; List<MethodInfo> functions = this.GetType().GetMethods(BindingFlags.NonPublic | BindingFlags.Instance).ToList(); tempType = interopAssemb.GetType("Interop.BeginLoad"); if (tempType != null) { mInfo = functions.Find(P=>P.Name.Contains("BeginLoad")); if (mInfo != null) { beginLoadDel = Delegate.CreateDelegate(tempType, mInfo); } } else { success = false; } lresult = success; } } catch (Exception ex) { Logger.LogException(ex); } return lresult; } //Das ist die Funktion auf die mit dem Delegate gezeigt werden soll..... private void BeginLoad() { } Das Delegate das in der per Latebinding angebundene Dll definiert wurde, sieht wie folgt aus: public delegate void BeginLoad(); Seht ihr einen Fehler oder habt eine Vermutung? Lg Gateway
  8. Danke euch beiden für die fixe Antwort. @lilith2k3: In der Testanwendung kann man das jetzt etwas besser sehn. Dort wird das Objekt innerhalb des Threads lokal erstellt und am Ende wieder zerstört. Wird also schon innerhalb des selben Threads erstellt und freigegeben. @Klotzkopp: Ja ich konnte das allerselbe Verhalten in der Testanwendung nachvollziehen. Es kam wieder die Fehlermeldung (Sekunden nachdem man das Hauptfenster geschlossen hatte). Zusätzlich kommt jetzt ein MS Fehlerbericht: Die komplette Problemsignatur sieht wie folgt aus: Hier die Klasse die das Latebinding beinhaltet: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace TestApp { /// <summary> /// LateBinding D3Archive /// </summary> public sealed class D3RemoteCall { #region Properties /// <summary> /// /// </summary> public bool Compress { get { if (IsInitialized) { try { return (bool)Instance.GetType().InvokeMember("Compress", BindingFlags.GetProperty, null, Instance, null); } catch (Exception ex) { //Logger.LogException(ex); return false; } } else { return false; } } set { if (IsInitialized) { try { Instance.GetType().InvokeMember("Compress", BindingFlags.SetProperty, null, Instance, new object[] { value }); } catch (Exception ex) { ////Logger.LogException(ex); } } } } /// <summary> /// /// </summary> public string FunctionName { get { if (IsInitialized) { try { return Instance.GetType().InvokeMember("FunctionName", BindingFlags.GetProperty, null, Instance, null).ToString(); } catch (Exception ex) { //Logger.LogException(ex); return string.Empty; } } else { return string.Empty; } } set { if (IsInitialized) { try { Instance.GetType().InvokeMember("FunctionName", BindingFlags.SetProperty, null, Instance, new object[] { value }); } catch (Exception ex) { //Logger.LogException(ex); } } } } /// <summary> /// /// </summary> public string IPAddr { get { if (IsInitialized) { try { return Instance.GetType().InvokeMember("IPAddr", BindingFlags.GetProperty, null, Instance, null).ToString(); } catch (Exception ex) { //Logger.LogException(ex); return string.Empty; } } else { return string.Empty; } } set { if (IsInitialized) { try { Instance.GetType().InvokeMember("IPAddr", BindingFlags.SetProperty, null, Instance, new object[] { value }); } catch (Exception ex) { //Logger.LogException(ex); } } } } /// <summary> /// /// </summary> public string Language { get { if (IsInitialized) { try { return Instance.GetType().InvokeMember("Language", BindingFlags.GetProperty, null, Instance, null).ToString(); } catch (Exception ex) { //Logger.LogException(ex); return string.Empty; } } else { return string.Empty; } } set { if (IsInitialized) { try { Instance.GetType().InvokeMember("Language", BindingFlags.SetProperty, null, Instance, new object[] { value }); } catch (Exception ex) { //Logger.LogException(ex); } } } } /// <summary> /// /// </summary> public string Password { set { if (IsInitialized) { try { Instance.GetType().InvokeMember("Password", BindingFlags.SetProperty, null, Instance, new object[] { value }); } catch (Exception ex) { //Logger.LogException(ex); } } } } /// <summary> /// /// </summary> public int Port { get { if (IsInitialized) { try { return (int)Instance.GetType().InvokeMember("Port", BindingFlags.GetProperty, null, Instance, null); } catch (Exception ex) { //Logger.LogException(ex); return 0; } } else { return 0; } } set { if (IsInitialized) { try { Instance.GetType().InvokeMember("Port", BindingFlags.SetProperty, null, Instance, new object[] { value }); } catch (Exception ex) { //Logger.LogException(ex); } } } } /// <summary> /// /// </summary> public string ReturnCode { get { if (IsInitialized) { try { return Instance.GetType().InvokeMember("ReturnCode", BindingFlags.GetProperty, null, Instance, null).ToString(); } catch (Exception ex) { //Logger.LogException(ex); return string.Empty; } } else { return string.Empty; } } } /// <summary> /// /// </summary> public string Server { get { if (IsInitialized) { try { return Instance.GetType().InvokeMember("Server", BindingFlags.GetProperty, null, Instance, null).ToString(); } catch (Exception ex) { //Logger.LogException(ex); return string.Empty; } } else { return string.Empty; } } set { if (IsInitialized) { try { Instance.GetType().InvokeMember("Server", BindingFlags.SetProperty, null, Instance, new object[] { value }); } catch (Exception ex) { //Logger.LogException(ex); } } } } /// <summary> /// /// </summary> public int Size { get { if (IsInitialized) { try { return (int)Instance.GetType().InvokeMember("Size", BindingFlags.GetProperty, null, Instance, null); } catch (Exception ex) { //Logger.LogException(ex); return 0; } } else { return 0; } } set { if (IsInitialized) { try { Instance.GetType().InvokeMember("Size", BindingFlags.SetProperty, null, Instance, new object[] { value }); } catch (Exception ex) { //Logger.LogException(ex); } } } } /// <summary> /// /// </summary> public int Table { get { if (IsInitialized) { try { return (int)Instance.GetType().InvokeMember("Table", BindingFlags.GetProperty, null, Instance, null); } catch (Exception ex) { //Logger.LogException(ex); return 0; } } else { return 0; } } set { if (IsInitialized) { try { Instance.GetType().InvokeMember("Table", BindingFlags.SetProperty, null, Instance, new object[] { value }); } catch (Exception ex) { //Logger.LogException(ex); } } } } /// <summary> /// /// </summary> public string TableHeadline { get { if (IsInitialized) { try { return Instance.GetType().InvokeMember("TableHeadline", BindingFlags.GetProperty, null, Instance, null).ToString(); } catch (Exception ex) { //Logger.LogException(ex); return string.Empty; } } else { return string.Empty; } } set { if (IsInitialized) { try { Instance.GetType().InvokeMember("TableHeadline", BindingFlags.SetProperty, null, Instance, new object[] { value }); } catch (Exception ex) { //Logger.LogException(ex); } } } } /// <summary> /// /// </summary> public string User { get { if (IsInitialized) { try { return Instance.GetType().InvokeMember("User", BindingFlags.GetProperty, null, Instance, null).ToString(); } catch (Exception ex) { //Logger.LogException(ex); return string.Empty; } } else { return string.Empty; } } set { if (IsInitialized) { try { Instance.GetType().InvokeMember("User", BindingFlags.SetProperty, null, Instance, new object[] { value }); } catch (Exception ex) { //Logger.LogException(ex); } } } } /// <summary> /// /// </summary> public string Version { get { if (IsInitialized) { try { return Instance.GetType().InvokeMember("Version", BindingFlags.GetProperty, null, Instance, null).ToString(); } catch (Exception ex) { //Logger.LogException(ex); return string.Empty; } } else { return string.Empty; } } set { if (IsInitialized) { try { Instance.GetType().InvokeMember("Version", BindingFlags.SetProperty, null, Instance, new object[] { value }); } catch (Exception ex) { //Logger.LogException(ex); } } } } /// <summary> /// /// </summary> public bool IsInitialized { get { if (Instance != null && TargetType != null) return true; else return false; } } /// <summary> /// IsConnected /// </summary> public bool IsConnected { get; private set; } /// <summary> /// /// </summary> private object Instance { get; set; } /// <summary> /// /// </summary> private List<MethodInfo> Methods { get; set; } /// <summary> /// /// </summary> private Type TargetType { get; set; } /// <summary> /// /// </summary> private Assembly TargetAssembly { get; set; } #endregion #region StaticVars public static int ExecuteCount { get; private set; } public static bool ExecuteSucceeded { get; private set; } #endregion #region Constr /// <summary> /// /// </summary> /// <param name="assembly"></param> public D3RemoteCall(Assembly assembly) { TargetAssembly = assembly; } #endregion #region Functions /// <summary> /// /// </summary> /// <returns></returns> public bool CreateInstance() { bool lresult = false; try { if (TargetAssembly != null) { TargetType = TargetAssembly.GetType("d3remote.D3RemoteCallClass"); Instance = Activator.CreateInstance(TargetType); Methods = new List<MethodInfo>(Instance.GetType().GetMethods()); lresult = true; } } catch (Exception ex) { //Logger.LogException(ex); } return lresult; } /// <summary> /// /// </summary> public void AboutBox() { if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("AboutBox")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; ifo.Invoke(Instance, null); } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "AboutBox" }); } } catch (Exception ex) { //Logger.LogException(ex); } } } /// <summary> /// /// </summary> public void Add() { if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("Add")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; ifo.Invoke(Instance, null); } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "Add" }); } } catch (Exception ex) { //Logger.LogException(ex); } } } /// <summary> /// /// </summary> /// <returns></returns> public bool Connect() { bool lresult = false; if (IsInitialized && !IsConnected) { try { var m_info = Methods.Where(P => P.Name.Equals("Connect")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; object val = ifo.Invoke(Instance, null); if (val != null) { try { lresult = (bool)val; IsConnected = lresult; } catch { } } } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "Connect" }); } } catch (Exception ex) { //Logger.LogException(ex); } } return lresult; } /// <summary> /// /// </summary> public void Disconnect() { if (IsInitialized && IsConnected) { try { var m_info = Methods.Where(P => P.Name.Equals("Disconnect")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; ifo.Invoke(Instance, null); IsConnected = false; } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "Disconnect" }); } } catch (Exception ex) { //Logger.LogException(ex); } } } /// <summary> /// Release /// </summary> public void Release() { if (Instance != null && IsInitialized) { try { if (IsConnected) Disconnect(); System.Runtime.InteropServices.Marshal.ReleaseComObject(Instance); } catch { } finally { Instance = null; } } } /// <summary> /// /// </summary> /// <returns></returns> public bool Execute() { bool lresult = false; if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("Execute")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; object val = ifo.Invoke(Instance, null); if (val != null) { try { lresult = (bool)val; ExecuteSucceeded = lresult; ExecuteCount++; } catch { } } } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "Execute" }); } } catch (Exception ex) { //Logger.LogException(ex); } } return lresult; } /// <summary> /// /// </summary> /// <returns></returns> public bool First() { bool lresult = false; if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("First")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; object val = ifo.Invoke(Instance, null); if (val != null) { try { lresult = (bool)val; } catch { } } } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "First" }); } } catch (Exception ex) { //Logger.LogException(ex); } } return lresult; } /// <summary> /// /// </summary> /// <param name="Name"></param> /// <returns></returns> public string get_Exporting(string Name) { string result = string.Empty; if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("get_Exporting")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; object val = ifo.Invoke(Instance, new object[] { Name }); if (val != null) result = val.ToString(); else result = string.Empty; } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "get_Exporting" }); } } catch (Exception ex) { //Logger.LogException(ex); } } return result; } /// <summary> /// /// </summary> /// <param name="Name"></param> /// <returns></returns> public object get_Field(string Name) { object result = DBNull.Value; if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("get_Field")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; object val = ifo.Invoke(Instance, new object[] { Name }); result = val ?? DBNull.Value; } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "get_Field" }); } } catch (Exception ex) { //Logger.LogException(ex); } } return result; } /// <summary> /// /// </summary> /// <param name="Name"></param> /// <returns></returns> public string get_Importing(string Name) { string result = string.Empty; if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("get_Importing")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; object val = ifo.Invoke(Instance, new object[] { Name }); if (val != null) result = val.ToString(); else result = string.Empty; } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "get_Importing" }); } } catch (Exception ex) { //Logger.LogException(ex); } } return result; } /// <summary> /// /// </summary> /// <param name="Filename"></param> /// <param name="ErrNo"></param> /// <param name="Comment"></param> /// <returns></returns> public bool GetError(out string Filename, out int ErrNo, out string Comment) { bool lresult = false; if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("GetError")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; object[] parameter = new object[] { string.Empty, 0, string.Empty }; object val = ifo.Invoke(Instance, parameter); if (val != null) { try { lresult = (bool)val; } catch { } } if (lresult) { try { if (parameter[0] != null) Filename = parameter[0].ToString(); else Filename = string.Empty; if (parameter[1] != null) ErrNo = (int)parameter[1]; else ErrNo = 0; if (parameter[2] != null) Comment = parameter[2].ToString(); else Comment = string.Empty; } catch { Filename = string.Empty; ErrNo = 0; Comment = string.Empty; } } else { Filename = string.Empty; ErrNo = 0; Comment = string.Empty; } } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "GetError" }); Filename = string.Empty; ErrNo = 0; Comment = string.Empty; } } catch (Exception ex) { //Logger.LogException(ex); Filename = string.Empty; ErrNo = 0; Comment = string.Empty; } } else { Filename = string.Empty; ErrNo = 0; Comment = string.Empty; } return lresult; } /// <summary> /// /// </summary> /// <param name="Filename"></param> /// <param name="Status"></param> /// <param name="Key"></param> /// <param name="DestFile"></param> /// <returns></returns> public bool GetFile(string Filename, string Status, string Key, out string DestFile) { bool lresult = false; if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("GetFile")); if (m_info.Count() > 0) { object[] parameters = new object[] { Filename, Status, Key, string.Empty }; MethodInfo ifo = m_info.ToList()[0]; object val = ifo.Invoke(Instance, parameters); if (val != null) { try { lresult = (bool)val; } catch { } } if (lresult) { if (parameters[3] != null) DestFile = parameters[3].ToString(); else DestFile = string.Empty; } else { DestFile = string.Empty; } } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "GetFile" }); DestFile = string.Empty; } } catch (Exception ex) { //Logger.LogException(ex); DestFile = string.Empty; } } else { DestFile = string.Empty; } return lresult; } /// <summary> /// /// </summary> /// <param name="Filename"></param> /// <returns></returns> public bool LoadTableFromFile(string Filename) { bool lresult = false; if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("LoadTableFromFile")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; object val = ifo.Invoke(Instance, new object[] { Filename }); if (val != null) { try { lresult = (bool)val; } catch { } } } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "LoadTableFromFile" }); } } catch (Exception ex) { //Logger.LogException(ex); } } return lresult; } /// <summary> /// /// </summary> /// <returns></returns> public bool Next() { bool lresult = false; if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("Next")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; object val = ifo.Invoke(Instance, null); if (val != null) { try { lresult = (bool)val; } catch { } } } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "Next" }); } } catch (Exception ex) { //Logger.LogException(ex); } } return lresult; } /// <summary> /// /// </summary> /// <returns></returns> public bool Previous() { bool lresult = false; if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("Previous")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; object val = ifo.Invoke(Instance, null); if (val != null) { try { lresult = (bool)val; } catch { } } } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "Previous" }); } } catch (Exception ex) { //Logger.LogException(ex); } } return lresult; } /// <summary> /// /// </summary> /// <returns></returns> public int Process() { int retval = 0; if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("Process")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; object val = ifo.Invoke(Instance, null); if (val != null) { try { retval = (int)val; } catch { } } } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "Process" }); } } catch (Exception ex) { //Logger.LogException(ex); } } return retval; } /// <summary> /// /// </summary> /// <param name="Filename"></param> /// <returns></returns> public bool SaveTableToFile(string Filename) { bool lresult = false; if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("SaveTableToFile")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; object val = ifo.Invoke(Instance, new object[] { Filename }); if (val != null) { try { lresult = (bool)val; } catch { } } } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "SaveTableToFile" }); } } catch (Exception ex) { //Logger.LogException(ex); } } return lresult; } /// <summary> /// /// </summary> /// <param name="Name"></param> /// <param name="Value"></param> public void set_Exporting(string Name, string Value) { if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("set_Exporting")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; ifo.Invoke(Instance, new object[] { Name, Value }); } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "set_Exporting" }); } } catch (Exception ex) { //Logger.LogException(ex); } } } /// <summary> /// /// </summary> /// <param name="Name"></param> /// <param name="Value"></param> public void set_Field(string Name, string Value) { if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("set_Field")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; ifo.Invoke(Instance, new object[] { Name, Value }); } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "set_Field" }); } } catch (Exception ex) { //Logger.LogException(ex); } } } /// <summary> /// /// </summary> /// <param name="Name"></param> /// <param name="Value"></param> public void set_Importing(string Name, string Value) { if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("set_Importing")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; ifo.Invoke(Instance, new object[] { Name, Value }); } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "set_Importing" }); } } catch (Exception ex) { //Logger.LogException(ex); } } } /// <summary> /// /// </summary> /// <param name="Filename"></param> /// <param name="Status"></param> /// <param name="Key"></param> /// <returns></returns> public string vbsGetFile(string Filename, string Status, string Key) { if (IsInitialized) { try { var m_info = Methods.Where(P => P.Name.Equals("vbsGetFile")); if (m_info.Count() > 0) { MethodInfo ifo = m_info.ToList()[0]; object val = ifo.Invoke(Instance, new object[] { Filename, Status, Key }); if (val != null) return val.ToString(); else return string.Empty; } else { //Logger.WriteLine(LogLevel.Error, LogCategory.Application, LanguageServer.GetInstance().GetPhrase(1059696), new object[] { Instance.GetType().FullName, "vbsGetFile" }); return string.Empty; } } catch (Exception ex) { //Logger.LogException(ex); return string.Empty; } } else { return string.Empty; } } #endregion #region Destructor /// <summary> /// /// </summary> ~D3RemoteCall() { Release(); } #endregion } } Und hier haben wir den Testaufruf: public partial class Form1 : Form { private Thread m_Thread; Assembly assembly = null; public Form1() { InitializeComponent(); assembly = Assembly.LoadFrom(string.Format("{0}\\{1}", Path.GetDirectoryName(Application.ExecutablePath).TrimEnd(new char[] { '\\' }), "Interop.d3remote.dll")); } private void button1_Click(object sender, EventArgs e) { if (m_Thread == null || !m_Thread.IsAlive) { m_Thread = new Thread(new ThreadStart(ThreadContext)); m_Thread.Start(); } } private void ThreadContext() { D3RemoteCall interop = InitRemoteCall(); interop.Connect(); interop.Release(); } protected internal D3RemoteCall InitRemoteCall() { D3RemoteCall d3RemoteCall = null; try { if (d3RemoteCall == null) { //Assembly assembly = null; //assembly = Assembly.LoadFrom(interopFilename); d3RemoteCall = new D3RemoteCall(assembly); if (!d3RemoteCall.CreateInstance()) { return null; } d3RemoteCall.IPAddr = "192.168.16.158"; d3RemoteCall.Port = 3400; d3RemoteCall.Server = "3rdParty"; d3RemoteCall.User = "max"; d3RemoteCall.Password = "max"; d3RemoteCall.Version = "XXX10001"; d3RemoteCall.Language = "049"; } } catch (Exception ex) { return null; } return d3RemoteCall; } } LG Gateway
  9. Hallo liebe Leute, wir binden eine Anwendung eines Drittanbieters über deren COM Objekte an. Jetzt hatten wir die Anforderung das ganze aufgrund der Dauer in den Hintergrund zu verbannen. Gesagt getan. Das COM Objekt wird über Latebinding angesteuert und die Klasse die das handelt wird nun innerhalb eines Threads erstellt und dannach vom selben Thread wieder sauber geschlossen und freigegeben. Jetzt hat sich allerdings folgendes Verhalten ergeben. Während das Programm aktiv ist geht die Ansteuerung der externen Komponente einwandfrei. Schließt man nun das Programm, so dauert es ein paar Sekunden und dann kommt folgende Meldung: Laut Spy++ wird diese MessageBox jedoch nicht von unserem Produkt, sonder von dem Prozess CSRSS.exe (System Prozess) geworfen. Zusätzlich wird folgender Eintrag im Eventlog hinzugefügt: Das ThreadingModel des COM Objektes ist laut Registry "Apartment". Führt man die Funktionen nicht in einem seperaten Thread aus, so wird die Meldung nicht geworfen. Muss ich da was beachten, wenn ich ein Com Objekt innerhalb eines Threads per Latebinding ansteuere? Irgendwelche Metaflags etc.? Ich bin mit den nerven am Ende und hab allmählich keine Ideen mehr. Nirgends wird eine Exception geworfen, alles läuft so wie es soll nur wenn man das Programm schließt kommt diese MessageBox. Gut man könnte sagen: Liebe Kunden ignoriert die Meldung, da diese die Funktionalität nicht beeinträchtigt. Aber was macht das für einen Eindruck . Habt Ihr gegebenenfalls noch Ideen? lg Gateway
  10. Hi Klotzkopp, danke. Das war totales versagen auf ganzer Linie . Eine Lokale Variable die nach dem Aufruf keine Gültigkeit mehr hatte.... Was hab ich mir nur dabei gedacht. Und ich meinte natürlich virtual anstatt abstract. Ich verwechsel die Schlüsselwörter immer mal wieder. Hab es jetzt nochmal fix ausprobiert und es geht doch einfwandfrei . Fand das schon komisch das ich nicht zwischen beiden Typen nicht Casten konnte. Child* child = new Child(33,"das ist ein test"); Mother* mother = (Mother*)child; cout << "-->" << ((Child*)mother)->GetString() << ((Child*)mother)->GetInt() << endl; delete child; Aus reinem Interesse würde mich mal interessieren wie du das angehen würdest? Würdest du alle Klassen exportieren oder auch Interface Klassen (mit den relevanten Funktionen) schreiben und diese exportieren? Ich weiß nicht ob das so gänig ist. Ich hatte erst angefangen alle Klassen zu exportieren, bin aber fast wahnsinnig geworden weil ich wieder jede kleine Neuerung exportieren musste (Auch wenn diese nur intern genutzt wird). Lg Gateway
  11. Hallo Leute, damit man mein Problem versteht hol ich kurz einmal weiter aus. Ich schreibe aktuell ein Framework das letztendlich aus mehreren DLL bestehen wird. Aktuell habe ich ein mächtiges Problem mit exportieren der Klassen. Da die Klassen größtenteils voneinander abhängig sind muss ich fast überall ein Export machen und das finde ich jetzt nicht sehr elegant und das würde ich auch gerne vermeiden. Zumal ich dann die Header immer mit in die anderen Projekte schleppen müsste. Ich hatte mir daher folgendes überlegt: Ich schreibe "Interface" Klassen, welche die Notwendigen Funktionen (als abstract) beinhalten. Diese Interface Klassen exportiere ich. Die nicht exportierten Klassen erben von den "Interface" Klassen und implementieren deren Funktionen. Dann gibt es eine Exportierte Funktion die letztendlich eine Instanz der nichtexportierten Klasse erstellt und über ein Cast die Interface Klasse zurückgibt. Bin mir jetzt nicht sicher ob das verständlich rüberkam. Daher werde ich jetzt einfach mal ein Beispiel posten (Hierbei geht es nur um das Casten und Vererbung): class Mother { private: std::string data; public: Mother(std::string input); void SetString(std::string input); std::string GetString(); }; class Child : public Mother { private: int number; public: Child(int input, std::string input2); void SetInt(int input); int GetInt(); }; Mother* GetMotherInstance(int input1, std::string input2) { Child result = Child(input1, input2); return dynamic_cast<Mother*>(&result); } Wenn ich jetzt den Mother Pointer, welchen ich von der Funktion GetMotherInstance zurückerhalten wieder versuche zum Child zu casten macht er das auch. Aber ich habe keinen Zugriff mehr auf die Membervariablen der Mother Klasse. Ich arbeite leider nur selten mit Vererbung in C++, daher sind meine Kentnisse diesbezüglich sehr beschränkt. Da es in anderen Programmiersprachen möglich ist, nahm ich an das es eventuell auch in C++ möglich ist. Damit meine ich: Wenn ich eine Instanz der Kindes erstelle, es mit Daten fülle und dann die Variable als Mutter Typ caste und dann die Muttervariable wieder zurück als Kind Typ caste, dann will ich, das die Kindspezifischen Daten, welche ich vorher gesetzt habe, noch vorhanden sind. Jetzt die Frage. Ist das generel in C++ nicht möglich oder muss ich bei dem Konstrukt nur auf etwas achten oder eine spezielle Art des Castings nutzen? LG Gateway
  12. Das grenz ja echt schon an perversion. Habs jetzt hinbekommen, allerdings über dein ein oder anderen Umweg. Ich frag jetzt das Objekt per Position ab um herauszufinden auf welches Element nun wirklich geklickt wurde. Dann muss ich noch timestamps abfragen und vergleichen damit er die clickevents der übergeordneten Elemente ignorieren kann. Ganz tooooooolllll. Da stellen sich bei mir echt die nackenhaare auf und ich weiß wieder warum ich dieses webgepunche nicht mag. Ich meine wenn ich in einer Richtextanwendung auf einen Button klicke bekomme ich ja auch nicht den Click-Eventhandler vom Form . Echt bescheuert, wer hat sich nur diesen unsinn ausgedacht. :upps <!-- Legende: {0} Treatment Refnr (Possible Values: any number) {1} Treatment Name (Possible Values: any string) {2} Treatment Description (Possible Values: any string) {3} Treatment Timestamp (Possible Values: null or date string) {4} Treatment CancelTimeStamp (Possible Values: null or date string) {5} Treatment CancelText (Possible Values: any string) {6} Treatment CancelUser (Possible Values: any string) {7} Treatment DescriptionRTF (Possible Values: any string) {8} Treatment Duration (Possible Values: any number) {9} Treatment ErfAkt (Possible Values: any string) {10} Treatment ExistsHistory (Possible Values: True, False) {11} Treatment FlagReport (Possible Values: True, False) {12} Treatment HasRemark (Possible Values: any integer) {13} Treatment IsEditable (Possible Values: True, False) {14) Treatment LastEditTimestamp (Possible Values: null or date string) (15) Treatment TreatmentDomainName (Possible Values: any string) (16) Treatment Status (Possible Values: -2 = NotSet, -1 = Canceled, 0 = Default, 1 = Confirmed, 2 = Closed) (17) Treatment IsCanceled (Possible Values: True, False) (18) Treatment Task Available (Possible Values: True, False) (19) Treatment Dialog Text (Possible Values: any string) (20) Treatment Goal Text (Possible Values: any string) (21) Treatment TaskItem Status (Possible Values: -2 = NotSet, -1 = Canceled, 0 = Default, 1 = Confirmed, 2 = Closed) (22) IsActivityDone (Possible Values: True, False) (23) IsActivityCanceled (Possible Values: True, False) {24} IsSelected (Possible Values: 0,1); {30} Evalution Refnr (Possible Values: any number) {31} Evaluation ErfAkt (Possible Values: any string) {32} Evaluation EVTRefnr (Possible Values: any number) {33} Evaluation InfoText (Possible Values: any string) {34} Evaluation InfoTextWithReference (Possible Values: any string) {35} Evaluation ORefnr (Possible Values: any number) {36} Evaluation OTRefnr (Possible Values: any number) {37} Evaluation PERefnr (Possible Values: any number) {38} Evaluation Reference (Possible Values: any number) {39} Evaluation ShortInfoText (Possible Values: any string) {40} Evaluation Text (Possible Values: any string) {41} Evaluation RTF Text (Possible Values: any string) {42} Evaluation Timestamp (Possible Values: Null or DateTime-string) {43} Evaluation User (Possible Values: any string) Util Fields: (>= 60) {60} Mcc Image Directory (with backslash at the end) {61} Absolut Path to MCC Image Dir (with slash at the end) --> <!DOCTYPE html public "-//W3C//DTD HTML 4.0//en"> <html> <head> <title> </title> <style type="text/css"> body { font-family: arial; font-size: 0.8em; color: #444; } pre { font-family: arial; font-size: 15px; padding: 0px 0px 0px 3px; margin: 0px; color: #444; } img { margin: 0px; padding: 0px; display: block; } .divNormal { background-color: #cee1f0; width:90%; max-width: 90%; padding: 5px; margin: 10px; } .divInFocus { background-color: #ff9c3f; width: 90%; max-width: 90%; padding: 5px; margin: 10px; } .span-icon { float: left; width: 16px; height: 16px; margin-right: 8px; background: #ccc; } .span-100 { padding: 4px; float: left; width: 100px; } .span-120 { padding: 4px; float: left; width: 120px; } .span-right { padding: 4px; margin-left: 220px; width: 100%; } .shadow { border-top: 3px #eee solid; border-left: 3px #eee solid; padding: 3px; white-space: pre; } .content { height: 24px; background-color: white; margin-top: 3px; margin-left: 228px; padding: 0px; border: 1px grey solid; } .commentContentNormal { margin-left: 228px; border-top: 3px #eee solid; border-left: 3px #eee solid; padding: 3px; white-space: pre; background-color: #cee1f0; } .commentContentFocus { margin-left: 228px; border-top: 3px #eee solid; border-left: 3px #eee solid; padding: 3px; white-space: pre; background-color: #ff9c3f; } </style> <script type="text/javascript" language="javascript"> var focusedItem = null; var focusedComment = null; var x, y; var lastRaisedEvent = 0; function Select(sender) { if (focusedItem) { focusedItem.className = 'divNormal'; focusedItem = null; } if (sender) { focusedItem = sender; sender.className = "divInFocus"; document.location.href = "Http://select_" + sender.id + "/"; } } function SelectComment(sender) { if (focusedComment) { focusedComment.className = 'commentContentNormal'; focusedComment = null; } if (sender) { focusedComment = sender; sender.className = "commentContentFocus"; //document.location.href = "Http://select_" + sender.id + "/"; } } function DetailView(sender) { if (sender) { document.location.href = "http://detail_" + sender.id + "/"; } } function CommentDetailView(sender) { if (sender) { document.location.href = "http://commentdetail_" + sender.id + "/"; } } function SetRealizedState(id) { if (id) { document.location.href = "Http://realized_" + id + "/"; } } function SetCanceledState(id) { if (id) { document.location.href = "Http://canceled_" + id + "/"; } } function GetElementAtCursor() { return document.elementFromPoint(x, y); } function recordMouse(e) { var e = window.event; if (e.pageX || e.pageY) { x = e.pageX; y = e.pageY; } else if (e.clientX || e.clientY) { x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop; } } function OnDblClick(sender) { //debugger; var target = GetElementAtCursor(); while ((target.tagName.toLowerCase() != "div" || target.id.length <= 0) && target.tagName.toLowerCase() != "body") { target = target.parentElement; } if (lastRaisedEvent != 0 && (new Date().getTime() - lastRaisedEvent) <= 500) { lastRaisedEvent = new Date().getTime(); return; } if (target) { if (target.id.indexOf("?") !== -1) { CommentDetailView(target); } else { DetailView(target); } } lastRaisedEvent = new Date().getTime(); } </script> </head> <body onmousemove="recordMouse(this)"> <!==TreatmentEntity::Start==> <div id="{0}" onmousedown="Select(this);" ondblclick ="OnDblClick(this)" class="divNormal"> <div class="span-100"> <div class="span-icon"> <script type="text/javascript"> if ("{11}" == "True") { document.write("<img src='{61}ReportRelevant.png' />"); } </script> </div> <div class="span-icon"> <script type="text/javascript"> if ("{18}" == "True") { if ("{22}" == "True") { document.write("<img src='{61}TreatmentStateDone.png' onclick='SetRealizedState({0})' style='cursor:hand' />"); } else { document.write("<img src='{61}TreatmentStateDoneGrey.png' onclick='SetRealizedState({0})' style='cursor:hand' />"); } } </script> </div> <div class="span-icon"> <script type="text/javascript"> if ("{18}" == "True") { if ("{23}" == "True") { document.write("<img src='{61}TreatmentStateCancelled.png' onclick='SetCanceledState({0})' style='cursor:hand' />"); } else { document.write("<img src='{61}TreatmentStateCancelledGrey.png' onclick='SetCanceledState({0})' style='cursor:hand' />"); } } </script> </div> <div class="span-icon"> <script type="text/javascript"> if ("{10}" == "True") { document.write("<img src='{61}HasHistoryItems.png' />"); } </script> </div> </div> <div class="span-120 date"> <b> <script type="text/javascript"> var str = "{3}"; document.write(str.substr(0, 16)); </script> </b> </div> <div class="span-right header"> <b>{1}</b><br /> ErfAkt: {9} </div> <div class="span-100 tredomain">{15}</div> <div class="span-120"></div> <div class="span-right content"> <div class="shadow"><pre>{2}</pre></div> <div> <!==TreatmentEntity::Comment::Start==> <div id="{0}?{30}" onclick="SelectComment(this)" ondblclick="OnDblClick(this)" class="commentContentNormal"> <pre>{41}</pre> </div> <!==TreatmentEntity::Comment::End==> </div> </div> </div> <!==TreatmentEntity::End==> </body> </html>
  13. Hallo liebe Leute, ich habe folgendes Problem: Ich will das doppelclick event von zwei divcontainer handlen. Dafür existieren zwei javascriptfunktionen. Der eine divcontainer befindet sich im andern divcontainer (Notwendig). Wenn ich jetzt auf der Seite auf den "InnerDiv" Container klicke führt er erst die javafunktion aus die dem "OutterDiv" Container als Doppelklick Handler zugewiesen wurde, bevor er javascriptfunktion des "InnerDiv" Containers ausführt. Ich habe doch nur auf den "InnerDiv" Doppelgeklickt. Warum führt er dennoch auch das doppelklickevent des übergeordneten Containers aus?! Kann man das umgehen ohne den inneren Div Container aus dem "OutterDiv" Container rauszunehmen? So sieht die gekürzte Fassung aus: <body> <!==TreatmentEntity::Start==> <div id="OutterDiv" onclick="Select(this);" ondblclick ="DetailView(this)" class="divNormal"> <div class="span-100 tredomain">{15}</div> <div class="span-120"></div> <div class="span-right content"> <div class="shadow"><pre>{2}</pre></div> <div> <!==TreatmentEntity::Comment::Start==> <div id="InnerDiv" onclick="SelectComment(this)" ondblclick="CommentDetailView(this)" class="commentContentNormal"> <pre>{41}</pre> </div> <!==TreatmentEntity::Comment::End==> </div> </div> </div> <!==TreatmentEntity::End==> </body> LG Gateway
  14. Ich bin aktuell wirklich mit meinem Latein am Ende. Aktuell war mein Lösungsweg der folgende: Ich habe für beide CPU Plattformen dll's compiliert (x86,x64) Dann hab ich eine Library geschrieben (Any Debug) die abhängig vom System die Libraries über Reflection anspricht. Auf 32 bit Rechner scheint das wunderbar zu funktionieren. Jetzt des strange verhalten. Er versucht mit Assembly.LoadFile() die Assembly zu laden und bringt den Fehler: Ich flipp gleich aus. Auf der selben Maschine in der kleine testanwendung läd er die 64 bit Assembly perfekt. Und die Dateien sind die selben hab die bestmmt schon 5 mal kopiert und abgeglichen. Irgendwelche Vermutungen oder Ratschläge? Ich bin allmählich mit meinem Latein am Ende. Lg Gateway Ich habe hier ein Windows 7 64 bit. Wenn ich eine Testanwendung laufen lasse funktioniert das ganze über assembly load perfekt. Er lädt brav die 64 bit compilierte .net interop. Wenn ich das ganze dann in das das eigentlich Projekt einbinde (Assemblies werden in das bin verzeichnis der Anwendung kopiert), passiert folgendes:
  15. Hi leute, ich habe folgendes Problem: Es existiert eine C++ objektlib zum rendern von pdf dokumenten . Dann existiert noch ein C++/Clr Projekt das als .NET Wrapper fungiert und die die erste objektlib linkt und diese für unsere .NET Klassen bereitstellt. Bei unseren ganzen .NET Projekten ist als Zielplattform AnyCpu eingestellt (soll auch so bleiben). Bei dem Clr Projekt kann ich aber als Zielplattform nur x86 und x64 einstellen. Wenn ich jetzt in einem bestehenden .NET Projekt refenziere sagt er die Projekte hätten nicht die gleiche Zielplattform und er lässt es mich nicht builden. Wie schaffe ich es jetzt von den anderen Projekte (AnyCpu) auf die Dll zuzugreifen. Ich hatte gelesen das bei LateBinding ein Laufzeitfehler auftritt. Hab es selbst noch nicht getestet weil der Aufwand dafür recht groß ist und ich diesen Aufwand nicht umsonst machen möchte. Hat jemand eine Idee oder schonmal das gleiche Problem gehabt? Lg Gateway
  16. Hi, hat sich erledigt. Bin durch Zufall auf einen Eintrag in einem Forum gestoßen. Dort wurde empfohlen den Hotfix KB976656 einzuspielen. Hat bei mir dannach funktioniert . Lg Gateway
  17. Hi, ich habe ein C++/Clr Projekt von 4.0 auf 3.5 gestellt. Unter 4.0 lief es noch unter 3.5 kommt die Fehlermeldung: Zudem öffnet sich folgendes Fenster: http://image-upload.de/image/owVTxn/fbd749]Bild der Meldung Laut msdn soll ich dir optimierungoptionen der reihe nach ausschalten bis es geht (link). Es hat aber leider nichts gebracht. So sind die aktuellen Einstellungen: Screenshot der Settings Ich weiß nichtmehr weiter . Hat einer von euch eine Idee? Lg Gateway
  18. Hi leute, ich hab die firewall regeln hinzugefügt. Da tut sich nichts. Ich bin echt am verzweifeln. Ich hab es jetzt zusätzlich noch auf einen anderen Weg versucht. Ich verbinde beide rechner immernoch über teamviewer vpn. Allerdings hab ich jetzt noch auf dem "Zielrechner" freeSShd installiert und damit einen ssh tunnel aufzubauen (mit forwarding). Ich hab das Programm jetzt bestimmt schon 4 mal neuinstalliert und mich bei der Einrichtung immer strickt an diese Anleitung gehalten. Aber immer wenn ich die Benutzerdaten bei putty eingebe sagt er mir Access denied. Ohne weitere Informationen. (Ich muss mal checken ob es da ein logging gibt). Ich hab den user bestimmt auch zehn mal neu erstellt weil ich dachte ich hab mich verschrieben. Ebenfalls habe ich es mit public und private key authentifizierung versucht. Auch das hat nicht funktioniert. Als ich das Netz durchstöberte, bin ich auf dieverse Einträge gestoßen wo es heißt freesshd funktioniert bei ssh verbindungen nur sporatisch und ist total instabil. Zwei dinge deshalb. Denkt ihr die Anleitung die ich weiter oben verlinkt hatte ist nonsense? Und kennt jemand von euch einen weiteren ssh server (mit forwarding funktionalität) für Windows? Bitte sagt jetzt nicht openssh. Mit der Anwendung komm ich garnicht klar. (Ich steh auf Dialoge und Oberflächen zur konfiguration). Und es geht mir auch nicht darum jedes Einstellung tätigen zu können die es in diesem Zusammenhang gibt (die ich gegenenfalls auch nicht verstehe). Ich will einfach nur das es funktioniert damit ich endlich bequem arbeiten kann. Lg Gateway
  19. Also die Windows 7 Maschine ist in folgendem Netz: 192.168.16.0 (255.255.255.0) Das eingestellte Gateway : 192.168.16.1 Die IP, welche die Maschine in Ihrem lokalen Netz hat lautet: 192.168.16.11 Die Daten für die Windows XP Maschine: Netz: 192.168.112.0 (255.255.255.0) IP:192.168.112.124 Beide Maschinen lassen sich von den jeweiligen dhcp servern deren IP's zuweisen. Wenn ich Zugriff auf den Router hätte ginge das. Leider ist das keine Option. Mir gefällt das rumgefrickel hier auch nicht wirklich aber es ist nunmal notwendig. Ich werd nachher mal das mit der Firewall ausprobieren. Wobei ich für beide Adapter diese eigentlich schon augeschalten habe. Lg Gateway
  20. Warum sollte ich?! Es ist ja in der Realität auch nicht anderns und ich würde die Ausgangssituation dann nicht korrekt wiedergeben. Und warum machst du auf die Ip Adressen die mir Tv zugewiesen hat ein whois?! Dir ist bewusst das die IpAdressen "virtuell" sind und nur innerhalb des Vpn's gültig sind?! Ich bin mir gerade nicht so ganz sicher was du damit meinst oder worrauf du hinaus willst.:confused: Auf diese Adressen habe ich auch leider keinen Einfluss da mir Teamviewer diese automatisch zuordnet und mir keine Einstellungsmöglichkeiten lässt. Lg Gateway
  21. Hallo liebe leute, erstmal zur Ausgangssituation. Ich haben einen Windows 7 Rechner und einen Windows XP Rechner. Beide befinden sich an verschiedenen Orten. Jetzt erstelle ich über Teamviewer eine vpn Verbindung zwischen eben diesen beiden Computern. Jetzt soll der Windows 7 Rechner zugriff auf das lokale Netzwerk haben in dem sich der Windows XP Rechner befindet. Das Subnetz des lokalen Netzes ist 255.255.255.0 und die Netzadresse lautet 192.168.112.0 Innerhalb des vpns sieht die IP zuweisung wie folgt aus: Windows7 : 7.197.125.222 XP: 7.197.134.168 Dem Windows 7 rechner wurde folgende Route hinzugefügt: Netzwerkziel; Netzwerkmaske; Gateway; Schnittstelle 192.168.112.0; 255.255.255.0; 7.197.134.168; 7.197.125.222 Auf dem WinXP Rechner wurden folgende Konfigurationen getätigt: Folgender Registry änderung wurde vorgenommen: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] "IPEnableRouter"=dword:00000001 (von 0 auf 1) Folgende Befehle wurde abgesetzt: netsh routing ip nat install netsh routing ip nat add interface "TeamviewerVpn" private netsh routing ip nat add interface "LAN-Verbindung" full netsh routing ip nat add interface Intern private net start remoteaccess Das Resultat ist ernüchternd. Ich kann trotz der Konfiguration nichts im Netz anpingen(Zeitüberschreitung) und auch nicht auf die Maschinen connecten. Irgendwelche Ideen? Lg Gateway
  22. Sry für doppelpost. Habs jetzt aber so eingerichtet wie du gemeint hast. Jetzt haben sich die Fehlermeldung geringfügig geändert: Statt dllexport meckert er jetzt wegen dllimport rum. Hm ich verstehs nicht. Die dll's greifen ja auch untereinander aufeinander zu. Und die lassen sich alle reibungslos compilieren. Lg Gateway
  23. In dem Header wThread.h wird der BaseDef header inkludiert. In dem header ist bereits _export definiert. Eigentlich sollte das doch reichen? Denn der Headerinhalt wird ja zur compilezeit reinkopiert. Oder hab ich das falsch verstanden? Das _export Symbol ist jedenfall in der Consolen Anwendung nutzbar (wird in der Intellisense liste aufgeführt). lg Gateway EDIT: Jetzt hab ich erst geschnallt was du meinst . Habs ausprobiert aber hat leider nichts genützt. Eventuell hab ich es an der falschen stelle eingefügt. Ich werds heute abend nochmal etwas austesten.
  24. Hi, sollte passen. Ist aktuell auf /MD gesetzt. Ah okay seh grad ich müsst es auf /LD stellen oder? Lg Gateway

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