Ein ref-oder out-argument muss ein zuweisbarer variable
Ich bin der Codierung eine Anwendung, die eine reverse-proxy-Verbindung, aber ich habe ein problem!!!
Der Fehler ist hier: new Form1.ProxyConfig()
Wenn ich ihn starten will bekomme ich eine Fehlermeldung: "Ein ref-oder out-argument muss ein zuweisbarer variable"
private void startToolStripMenuItem_Click(object sender, EventArgs e)
{
if (this.startToolStripMenuItem.Text == "Start")
{
var form2 = new Form2();
if (form2.ShowDialog() != DialogResult.OK)
return;
int num1 = Form1.ProxyListenerStart(ref new Form1.ProxyConfig()
{
pclient_port = form2.ClientPort,
pp_start = form2.LocalStartPort,
pp_end = form2.LocalEndPort
}, ref this._PN);
if (num1 != 0)
int num2 = (int) MessageBox.Show("Error " + num1.ToString());
else startToolStripMenuItem.Text = "Stop";
}
else
{
Form1.ProxyListenerStop();
startToolStripMenuItem.Text = "Start";
listView1.Items.Clear();
toolStripStatusLabel2.Text = "0";
}
}
private struct ProxyConfig
{
public int pclient_port;
public int pp_start;
public int pp_end;
}
Dies ist ein sehr starkes Indiz dafür, dass die Methode sollte nicht sein, die übergabe der parameter per Referenz in den ersten Platz, denn der Anrufer ist nicht zu erwarten, die variable mutiert ist (weil es keine variable).
Nein, es ist nicht ein Hinweis an alle. Wenn der Anrufer nicht über einen ref-parameter, dann hätte man eine ganz andere Art von Fehlermeldung. Dies ist ein ganz anderes Problem: Ausdrücke können nicht zugeordnet werden ... wie die Fehlermeldung ganz explizit sagt.
Ich sage nicht, dass der Anrufer sollte einfach weglassen
Meine Aussage oben ist korrekt: der Fehler ist nicht ein sehr starkes Indiz dafür, dass die parameter nicht per Referenz übergeben werden -- die beiden Fragen sind völlig orthogonal. Die Anrufer müssen die Aktualisierung der ProxyConfig übergeben -- es gibt keine Möglichkeit zu wissen, dass aus dem obigen code. Und es ist wahrscheinlich, dass die OP nicht schreiben und hat keine Kontrolle über ProxyListenerStart.
Nein, es ist nicht ein Hinweis an alle. Wenn der Anrufer nicht über einen ref-parameter, dann hätte man eine ganz andere Art von Fehlermeldung. Dies ist ein ganz anderes Problem: Ausdrücke können nicht zugeordnet werden ... wie die Fehlermeldung ganz explizit sagt.
Ich sage nicht, dass der Anrufer sollte einfach weglassen
ref
keyword-und dann wird es funktionieren, werde ich sagen, dass das Update so ändern Sie die Methode so, dass es nicht mehr übergibt die parameter per Referenz, anstatt es zu verändern übergeben in eine variable anstatt eines Wertes. Es ist nicht nur der Behebung von compiler-Fehler, aber eigentlich ist das schreiben eine gute Lösung.Meine Aussage oben ist korrekt: der Fehler ist nicht ein sehr starkes Indiz dafür, dass die parameter nicht per Referenz übergeben werden -- die beiden Fragen sind völlig orthogonal. Die Anrufer müssen die Aktualisierung der ProxyConfig übergeben -- es gibt keine Möglichkeit zu wissen, dass aus dem obigen code. Und es ist wahrscheinlich, dass die OP nicht schreiben und hat keine Kontrolle über ProxyListenerStart.
InformationsquelleAutor Cazanova Haxor | 2014-07-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie eine variable erstellen, und übergeben Sie es als Referenz zur gleichen Zeit, wie Sie es tun. Versuchen Sie dies:
Der Grund ist, dass es wirklich nicht mehr sinnvoll sind, betrachten Sie das folgende Szenario:
Danke Für Die Korrektur, Jetzt eine Andere Fehlermeldung Angezeigt werden "Ein es wurde versucht, ein Programm mit einem falschen format. (Ausnahme von HRESULT: 0x8007000B)"
Ja ich weiß, Dass es proxlib.dll
32-bit-dll? Ist Ihr Projekt auf "Any CPU" und Sie sind auf der auf einem 64-bit OS? Wenn ja, versuchen Sie zu zwingen, um eine 32-bit Version.
Das ist wahr, es ist die 32bit-DLL-Datei und ich nutze 64bit, ich werde versuchen, dass Dank ♥
InformationsquelleAutor Chris