![]() |
Operator not applicable
Hi
Langsam wirds immer schwiriger :(
Delphi-Quellcode:
Zwei Fehler in einer function.
function GetPresetCount(var pnPresetCount: LongInt): HRESULT;
Var IntVal: integer; begin if (IWmpEffects <> 0) then begin IntVal := 0; result := IWmpEffects.GetPresetCount(IntVal); pnPresetCount := IntVal; end else result := -1; end;
Delphi-Quellcode:
0 normalerweise in C# 'null' wie im MS Beispiel.
if (IWmpEffects <> 0) then
gibt in Delphi den Fehler aus. [Pascal Error] WMPUnit.pas(218): E2015 Operator not applicable to this operand type
Delphi-Quellcode:
laut MS Beispiel IWmpEffects.GetPresetCount(ref IntVal);
IWmpEffects.GetPresetCount(IntVal);
ref dürfte var sein funktioniert aber nicht! Zusätzlich kommt noch die Meldung [Pascal Error] WMPUnit.pas(221): E2018 Record, object or class type required für den bereich (ref IntVal);
Delphi-Quellcode:
Jemand ne Idee was da falsch läuft ?
IWMPEffects = interface(IUnknown)
['{D3984C13-C3CB-48e2-8BE5-5168340B4F35}'] procedure GetPresetCount(var pnPresetCount : LongInt); safecall; Gruss Emil |
Re: Operator not applicable
Delphi ist typensicher, d.h. also, das '0' nicht mit einem Interface kompatibel ist.
Verwende 'nil' oder die Funktion 'Assigned', also:
Delphi-Quellcode:
Und deklariere den Parameter auch als LongInt.
If IInterface <> nil Then
... If Assigned (IInterface) Then ... |
Re: Operator not applicable
Zitat:
Delphi-Quellcode:
geht leider auch nicht
function GetPresetCount(var pnPresetCount: LongInt): HRESULT;
Var IntVal: LongInt; begin If Assigned(IInterface) Then begin IntVal := 0; result := IWmpEffects.GetPresetCount(IntVal); pnPresetCount := IntVal; end else result := -1; end; [Pascal Error] WMPUnit.pas(218): E2008 Incompatible types Das !
Delphi-Quellcode:
gibt den gleiche Fehler zurück wie vorher
If IInterface <> nil Then
[Pascal Error] WMPUnit.pas(218): E2015 Operator not applicable to this operand type Auch das bleibt gleich. [Pascal Error] WMPUnit.pas(221): E2018 Record, object or class type required für den bereich (IntVal); obwohl als LongInt declariert. EDIT: Laut MS; Zitat:
gruss Emil |
Re: Operator not applicable
Liste der Anhänge anzeigen (Anzahl: 1)
Kapiere das nicht..
In c# läufts in Delphi hab ich diverse Probleme gruss Emil |
Re: Operator not applicable
Poste mal den entsprechende c#-Code
|
Re: Operator not applicable
Zitat:
Code:
Ka ob du nur die function meinst..
public int GetPresetCount(ref int count)
{ if (iWmpEffects != null) { int val = 0; int result = iWmpEffects.GetPresetCount(ref val); count = val; return result; } else return -1; } Und ob das reicht. Notfalls könnte ich die ganze Classe senden .. aber nicht den kompletten Quelltext. Sorry gruss Emil |
Re: Operator not applicable
Eweiss: Ich hab doch 'IInterface' nur als Beispiel genommen: Interface-Instanzen sind Zeiger, und Zeiger kann man mit 'nil' vergleichen. IInterface ist aber selbst eine Interface-Deklaration (mein Fehler, ich hätte deinen Variablennamen nehmen sollen, sorry).
Das kompiliert:
Delphi-Quellcode:
Var
x : IInterface; // Also ein I<irgendas>, ein Interface. Begin x:= nil; // Zuweisung auf Nil if x<>nil Then // Abfrage auf nil x := nil; if not assigned (x) then // Abfrage mit Assigned x := nil; End; |
Re: Operator not applicable
Zitat:
Habe mir das schon gedacht aber alle Versionen funktionieren auch dann nicht.
Delphi-Quellcode:
[Pascal Error] WMPUnit.pas(218): E2008 Incompatible types
function GetPresetCount(var count: LongInt): HRESULT;
Var IntVal: LongInt; begin If Assigned(IWmpEffects) Then begin IntVal := 0; result := IWmpEffects.GetPresetCount(IntVal); count := IntVal; end else result := -1; end; Weis jetzt auch nicht weiter. :wall: Gruss Emil |
Re: Operator not applicable
Die Funktion scheint ja einen Zeiger zu erwarten (long* count). Probiere einfach mal, @intval zu übergeben.
|
Re: Operator not applicable
Du mußt es auf eine Instanz und nicht auf das Interface selber anwenden.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz