Ошибка ")" Ожидается, но затем неверный токен ")"? - PullRequest
0 голосов
/ 27 апреля 2018

Я немного новичок в том, что касается C #, и я буквально не знаю, в чем здесь ошибка ...

using System;
using System.Windows.Forms;
namespace Sancarn
{
    public class Form1 : Form 
    {
        public event EventHandler MessageHandler;
        public Message lastMessage;

        public string ptrToString(ptr As IntPtr)
        {
            return Marshal.PtrToStringAnsi(ptr);
        }

        [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")]
        protected override void WndProc(ref Message m){
            EventHandler handler = MessageHandler;
            lastMessage = m;
            if(null != MessageHandler) MessageHandler(this,EventArgs.Empty);
            base.WndProc(ref m);
        }
    }
}

Когда я пытаюсь добавить это как новый тип в powershell, я получаю следующие ошибки:

Add-Type : c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(11) : ) expected
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(10) : 
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(11) : >>>         public string ptrToString(ptr As IntPtr)
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(12) :         {
I...

Add-Type : c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(11) : Invalid token ')' in class, struct, or interface member declaration
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(10) : 
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(11) : >>>         public string ptrToString(ptr As IntPtr)
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(12) :         {
...

Add-Type : c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(13) : Invalid token '(' in class, struct, or interface member declaration
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(12) :         {
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(13) : >>>             return Marshal.PtrToStringAnsi(ptr);
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(14) :         }
...

Add-Type : c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(13) : Invalid token ')' in class, struct, or interface member declaration
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(12) :         {
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(13) : >>>             return Marshal.PtrToStringAnsi(ptr);
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(14) :         }
...

Add-Type : c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(17) : Expected class, delegate, enum, interface, or struct
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(16) :         [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, 
Name="FullTrust")]
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(17) : >>>         protected override void WndProc(ref Message m){
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(18) :             EventHandler handler = MessageHandler;
...

Add-Type : c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(26) : Type or namespace definition, or end-of-file expected
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(25) :     }
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(26) : >>> }
...

Add-Type : c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(16) : The modifier 'override' is not valid for this item
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(15) : 
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(16) : >>>         [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, 
Name="FullTrust")]
c:\Users\sancarn\AppData\Local\Temp\vqezctgu.0.cs(17) :         protected override void WndProc(ref Message m){
...

Так что я не совсем уверен, что здесь происходит. С моей точки зрения, все скобки правильно спарены ... Я понял, что если я закомментирую объявление ptrToString, класс скомпилируется нормально ... Так что я уверен, что это объявление как-то виновато ошибка, но ... Либо я слепой, что-то упустил, либо в этом утверждении нет ничего плохого ...?

public string ptrToString(ptr As IntPtr){
    return Marshal.PtrToStringAnsi(ptr);
}

1 Ответ

0 голосов
/ 27 апреля 2018

В C # вы не объявляете параметры метода, используя As - то есть VB.

Вот фиксированный код:

using System;
using System.Windows.Forms;
namespace Sancarn {
    public class Form1 : Form {
        public event EventHandler MessageHandler;
        public Message lastMessage;

        public string ptrToString(System.IntPtr ptr) {
            return Marshal.PtrToStringAnsi(ptr);
        }

        [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
        protected override void WndProc(ref Message m) {
            EventHandler handler = MessageHandler;
            lastMessage = m;
            if (null != MessageHandler) MessageHandler(this, EventArgs.Empty);
            base.WndProc(ref m);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...