Ok danke für die Antwort.
Dann muss ich jetzt nur noch eine ordentliche Möglichkeit finden das zu prüfen.
Die Parameter in meinen Code waren nur Beispiele. Das können bis zu 50 Parameter sein... leider muss ich diese DLL benutzen und hab kein einfluss darauf.
Also müsste ich vorher sicherstellen das alle Parameter einen Wert haben bevor die Methode aufgerufen wird?.
Eine allgemeine Exception, keine bestimmte.
Es muss ja auch nicht unbedingt ein Try Catch sein. Ich bräuchte halt etwas das wenn es zu einem Fehler kommt mir das Programm nicht abstürzen lässt ich mir aber eine Fehlermeldung speichern kann.
Hallo zusammen,
Ich rufe mir eine externe DLL mittels Delegaten auf. Dabei muss jeder Parameter gesetzt sein sonst gibt es eine Speicher verletzung.
Wenn eine Speicher verletzung auftritt möchte ich dies gerne abfangen das mein Programm nicht abstürzt. Jedoch scheint ein Try Catch in einem Delegaten nicht so einfach zu funktionieren da das Programm weiterhin abstürzt.
Mein Delegate sieht wie folgt aus.
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate int Module(
string name,
string vName,
string geschlecht,
string alter);
Der Aufruf des Delegaten sieht so aus
protected override void LoadModuleFall()
{
try
{
MyClass parameter = new MyClass (parameter);
ModuleFalldaten loadData = (Module)Marshal.GetDelegateForFunctionPointer(Funktion, typeof(Module));
loadData (
parameter.name,
parameter.vName,
parameter.geschlecht,
parameter.alter);
}
catch (Exception ex)
{
// Exception ausgeben
}
}
Es würde mich freuen wenn mir jemand helfen könnte wie man dieses Problem lösen kann 🙂
Danke für die Antworten.
Das hilft mir weiter 🙂
Hallo zusammen,
leider weis ich nicht wonach ich suchen sollte für mein Problem. Es geht um die vereinfachung von einem If Ausdruck und ob dies überhaupt möglich ist.
Ich habe mehrere Werte die ich auf null Prüfe.
if (a == null || b == null || c == null || d == null /*... und immer so weiter */)
{
// mein code
}
Gibt es hier eine Schreibweise die mir das ganze etwas abkürzen kann?
Ich dachte da an so etwas wie folgendes.
if ((a || b || c || d) == null)
{
// mein code
}
Freue mich auf eine Antwort
Ich möchte das ganze eher Dynamisch händeln. Der Grund ist das es mehrere Versionen von der aufzurufenden DLL gibt. Hier muss ich bestimmte Unterscheidungen machen was für eine Version genutzt werden soll. Sonst müsste ich ja jede einzelne DLL als DLL Import definieren. Oder sehe ich das falsch?
Wenn du wirklich ein Plugin System bastelen möchtest, dann solltest du dir noch mal Gedanken über dein Konzept machen. So wie das aktuell ist, kann es nur nach hinten losgehen.
Dein Plugin sollte eine Schnittstelle haben, die das Programm, welches das Plugin nutzen möchte eindeutig versteht. Das kann man Besten über ein Interface machen, das dein Plugin implementiert und dein Programm laden kann. Dann musst auch nicht mehr die Parameter herausfinden, da alles mit einer eindeutigen Schnittstelle bekannt sein sollte für beide Seiten.
Hier noch etwas ausführlicher:
>
Ich wollte nochmal nachfragen ob du davon ausgegangen bist das "myDll" eine dll von mir ist?
Wenn ja, ist sie nicht. Sorry für das Missverständniss. Hätte es dann anders benennen sollen. Ich muss damit arbeiten und kann auch nichts an der "myDll" ändern.
MyDll ist eine Fremd Dll auf C bzw. C++ Basis soweit ich weiß.
Ah sorry habs gerade geshen 🙂
Danke.
Danke für die Antworten.
@ClaraSoft
Hättest du hier mal ein Beispielprogramm? Kann mir das ehrlich gesagt noch nicht so richtig vorstellen.
Hallo zusammen,
ich bin mir gerade nich sicher wonach ich Suchen soll. Ich wollte mal in Erfahrung bringen ob es möglich ist die Anzahl von Parametern aus einer DLL Methode zu bekommen?
Ich habe folgenden Code
public class MyClass
{
[DllImport("kernel32.dll", CharSet = CharSet.Ansi, SetLastError = true)]
private static extern IntPtr LoadLibrary(string library);
[DllImport("kernel32.dll", CharSet = CharSet.Ansi)]
public static extern IntPtr GetProcAddress(IntPtr hModule, string methodName);
public void LoadDll()
{
IntPtr module = LoadLibrary("myDll");
// Fehler behandlung wenn DLL nicht gefunden wurde
if (module == IntPtr.Zero)
{
return $"Could not load library: {Marshal.GetLastWin32Error()}";
}
IntPtr dllMethod = GetProcAddress(module, "myFunction");
// Fehler behandlung wenn Methode in der DLL nicht gefunden wurde
if (dllMethod== IntPtr.Zero)
{
return $"Fehler beim Laden der DLL Methode { Marshal.GetLastWin32Error() }";
}
// Hier möchte ich nun abfragen wieviel Parameter in der dll Methode "myFunction" vorhanden sind.
}
}
Freue mich auf eine Antwort 🙂
Danke für die Antworten.
Ich gehe nochmal anders an das Problem ran um das ganze besser aufzubauen.
Hallo,
mein Ziel ist es eine Art Dynamische Methode zu erstellen und auf Basis der Person Klasse soll die Anzahl der Paramater Dynamisch gesetzt werden.
Ich habe eine DLL. Diese DLL hat viele Versionen und es müssen auch weiterhin ältere Versionen angesprochen werden. Mittels DLL import wird die gewünschte DLL geladen.
Nun müsste ich ja unterscheiden welche Methode ich anspreche je nach Parameteranzahl die übergeben wurde. Und genau das wöllte ich durch eine Dynamische Methode ändern wollen. Eine Methode die ihre Parameter selbst aufbaut.
Aber soweit wie ich das Verstanden habe ist das nicht möglich?
Erstmal Danke für eure Antworten.
Hallo zusammen,
ich hoffe ich kann mein Problem gut beschreiben denn ich weis nicht wonach ich Suchen sollte.
Ich habe meine Hauptklasse und eine Klasse mit Properties
class Main
{
public Main()
{
Person person = new Person()
{
Vorname = Tom,
Alter = 12,
Geschlecht = M
};
Code code = new Code(person);
}
}
class Person
{
public string Name{ get; set; }
public string Vorname{ get; set; }
public string Alter { get; set; }
public string Geschlecht { get; set; }
}
Und ich habe eine Klasse in der Code ausgeführt wird. Hier möchte ich das meine Methode Dynamische Parameter besitzt die sich anhand der items von der Personen Klasse orientieren. D.h. wenn ich eine Personen Klasse mit 3 Propteries initialisiere und übergebe soll es mir 3 Parameter in der Methode erstellen. Initialisiere ich 4 werden mir 4 Parameter erstellt. etc.
class Code
{
public Code(Person personDaten)
{
DoSomething(personDaten);
}
private void DoSomething( /*> Hier sollen die Parameter Dynamisch aus dem übergeben objekt Person klasse erstellt werden in einer Reinfolge die ich anhand der Person Klasse selber bestimme <*/)
{
Console.WriteLine(paramVorname, paramAlter, paramGeschlecht);
//Ausgabe wäre in diesem Fall
//Tom, 12, M
}
}
Ich hoffe das ist einigermaßen verständlich 🙂
Ist so etwas möglich? Wenn ja hätte jemand ein simples Beispiel?
Freue mich auf eure Antworten.
Hello Abt and dannoe,
thanks a lot 🙂
Now it works.
Hallo zusammen,
ich hab eine kleine Blockade und hoffe Ihr könnt mir helfen 🙂
ich möchte gerne in einer Liste alle items suchen die meinen string ähneln mittels linq und ein Count() machen.
Dabei habe ich eine Liste aus meiner Klasse Person.
public class Person
{
public string Name{ get; set; }
public string Vorname{ get; set; }
}
Mein string ist eine Variable die über eine TextBox gesetzt wird.
string name = TextBox.Text;
Nun möchte ich mit alle Namen in meiner Liste Personen holen die %name% enthalten. Also quasi wie im SQL ein LIKE.
//Man müsste sich vorstellen die Liste wäre hier schon gefüllt :-)
List<Person> liste = new List<Person>()
//Das wäre mein Ansatz. Funktioniert aber so nicht.
var CountPerson = liste.Select(s => s.Name).Contains(name).toList().Count();
Hoffe ihr könnt mir helfen 🙂
Hallo,
hat sich erledigt. Habe es hinbekommen 🙂
Trotzdem danke.
Verwendetes Datenbanksystem: Oaracle SQL
Hallo zusammen,
könnte mir bitte jemand helfen folgendes select Statement in ein Linq ausdruck umzuwandeln?
SELECT
pe.abr_nr,
st.stapel_nr,
sub.eingereicht,
sub.erfasst,
sub.korrigiert,
sub.abgelehnt,
st.erfass_prot_dat,
st.pruef_prot_dat,
st.bearb_status_key
FROM
prax_einreichung pe,
stapel st,
(
SELECT
ef.einreich_nr,
ef.stapel_nr,
COUNT(*) as eingereicht,
COUNT(*) - COUNT(CASE WHEN ef.bearb_status_key = 1 THEN 1 END) as erfasst,
COUNT(ef.bearb_dat) as korrigiert,
COUNT(CASE WHEN ef.bearb_status_key = 1 THEN 1 END) as abgelehnt
FROM
einreichung_fall ef
group by ef.stapel_nr, ef.einreich_nr
) sub
WHERE
pe.einreich_nr = sub.einreich_nr
AND sub.stapel_nr = st.stapel_nr
and st.abr_jahr = pe.abr_jahr
and st.abr_qm = pe.abr_qm
and st.abr_art = pe.abr_art
AND pe.abr_jahr = 2020
AND pe.abr_qm = 10
AND pe.abr_art = 'ZE';
Gruß Nejox