Laden...

C++ im C# Projekt

Erstellt von dimuwe vor 15 Jahren Letzter Beitrag vor 15 Jahren 11.157 Views
D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 15 Jahren
C++ im C# Projekt

Hallo,
folgende Code ausschnitte habe ich bekommen und möchte diese in mein C# Projekt einbinden. kann mir jemand helfen wie dies funktioniert?


HRESULT GetSymbolSignalStrength(TCHAR *ptcDeviceName, int* piSignalQuality)
{
 	BOOL	bStatus;                                        // status variable
	DWORD	dwReturnedLength	= 0;
	DWORD	dwReturnCode		= 0xFFFF;
	USHORT	usAssociationStatus = 0;
   FPS24DRIVEREXTENSION	fpS24DriverExtension = NULL;
   FPS24DRIVERINIT			fpS24DriverInit = NULL;
   BYTE					byAdapterMacAddr[S24_MAC_ADDR_LENGTH];   
   DWORD					dwMaxWaitForComplete	= 5;
   S24_CHANNEL_QUALITY		ChannelQuality;
	
	fpS24DriverExtension =                                // handle to driver method
      (FPS24DRIVEREXTENSION)GetProcAddress(hLib,L"S24DriverExtension");
	fpS24DriverInit =                                     // initialization method pointer
      (FPS24DRIVERINIT)GetProcAddress(hLib,L"S24DriverInit");
	if((NULL == fpS24DriverExtension) || (NULL == fpS24DriverInit))
	{                                                     // failed to get the method,
      return 0;                                          //    fail
	}

	bStatus = (fpS24DriverInit)();                        // get the current status
	if (bStatus == FALSE)                                 // if we are not working...
	{
      return 0;                                          // fail
	}

	bStatus = (fpS24DriverExtension)(                     // Get the adapter MAC address
					0,								                  // MAC Address
					S24_GET_ADAPTER_MAC_ADDRESS,	            // Function code
					NULL,							                  // Client window
					0,								                  // User token
					dwMaxWaitForComplete,			            // Synchronous timeout
					NULL,							                  // Input buffer
					0,								                  // Input buffer length
					byAdapterMacAddr,				               // Output buffer
					S24_MAC_ADDR_LENGTH,			               // Output buffer length
					&dwReturnedLength,				            // Returned length
					&dwReturnCode);					            // Return code
	if (dwReturnCode != RC_SUCCESS)                       // if we failed...
	{
		return FALSE;                                      // fail
	}

	bStatus = (fpS24DriverExtension)(
				  byAdapterMacAddr,           					// MAC Address
				  S24_GET_CHANNEL_QUALITY,          			// Function code
				  NULL,								               // Client window
				  0,								                  // User token
				  dwMaxWaitForComplete,				            // Synchronous timeout
				  NULL,								               // Input buffer
				  0,								                  // Input buffer length
				  &ChannelQuality,					            // Output buffer
				  sizeof(ChannelQuality),			            // Output buffer length
				  &dwReturnedLength,				               // Returned length
				  &dwReturnCode);					               // Return Code
	if (dwReturnCode != RC_SUCCESS)                       // if we failed...
	{ 	
		return FALSE;                                      // fail
	}

   // The Symbol EVMON code bases signal quality on three factors...
   if (ChannelQuality.usPercentMissedBeacons > 60 ||
       ChannelQuality.usPercentTxRetries > 80 ||
       ChannelQuality.usRxRSSI < 9)
   {
       *piSignalQuality = 0;                             // No signal
   }
   if (ChannelQuality.usPercentMissedBeacons > 50 || 
       ChannelQuality.usPercentTxRetries > 75 ||
       ChannelQuality.usRxRSSI < 11)
   {
       *piSignalQuality = 1;                             // Very low
   }
   else if (ChannelQuality.usPercentMissedBeacons > 40 || 
            ChannelQuality.usPercentTxRetries > 70 ||
            ChannelQuality.usRxRSSI < 15)
   {
      *piSignalQuality = 2;                              // Low
   }
   else if (ChannelQuality.usPercentMissedBeacons > 32 ||
            ChannelQuality.usPercentTxRetries > 65 ||
            ChannelQuality.usRxRSSI <= 20)
   {
      *piSignalQuality = 3;                              // Good
   }
   else if (ChannelQuality.usPercentMissedBeacons > 20 ||
            ChannelQuality.usPercentTxRetries > 50 ||
            ChannelQuality.usRxRSSI < 25)
   {
      *piSignalQuality = 4;                              // Very good 
   }
   else
   {
      *piSignalQuality = 5;                              // Excellent
   }

   return S_OK;
}

HRESULT GetSignalStrength(TCHAR *ptcDeviceName, int* piSignalStrength, int* piSignalQuality)
{
   PNDISUIO_QUERY_OID   queryOID;
   DWORD                dwBytesReturned = 0;
   UCHAR                QueryBuffer[2000];
   HANDLE               ndisAccess = INVALID_HANDLE_VALUE;
   BOOL                 retval;
   HRESULT              hr;

   // Attach to NDISUIO.
   ndisAccess = CreateFile( NDISUIO_DEVICE_NAME,
      0, 0, NULL, OPEN_EXISTING,
      FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
      INVALID_HANDLE_VALUE );
   if ( ndisAccess == INVALID_HANDLE_VALUE )
      return E_FAIL; // ????

   // Get Signal strength
   queryOID = (PNDISUIO_QUERY_OID)&QueryBuffer[0];
   queryOID->ptcDeviceName = ptcDeviceName;
   queryOID->Oid = OID_802_11_RSSI;

   retval = DeviceIoControl(ndisAccess,
      IOCTL_NDISUIO_QUERY_OID_VALUE,
      (LPVOID) queryOID,
      sizeof(NDISUIO_QUERY_OID) + sizeof(long),
      (LPVOID) queryOID,
      sizeof(NDISUIO_QUERY_OID) + sizeof(long),
      &dwBytesReturned, NULL);

   if( retval && piSignalStrength && piSignalQuality )
   {
      hr = S_OK;
      *piSignalStrength = *(long *)&(queryOID->Data);

      //Here's Microsoft's interpretation
      //of the return value
      if(*piSignalStrength < -90)
         *piSignalQuality = 0; // No signal
      else if(*piSignalStrength < -81)
         *piSignalQuality  = 1; // Very low
      else if(*piSignalStrength < -71)
         *piSignalQuality  = 2; // Low
      else if(*piSignalStrength < -67)
         *piSignalQuality  = 3; // Good
      else if(*piSignalStrength < -57)
         *piSignalQuality  = 4; // Very good
      else
         *piSignalQuality  = 5; // Excellent
   }
   else
   {
      hr = E_FAIL;
   }

   CloseHandle( ndisAccess );

   return hr;

}

static TCHAR wName[ MAX_ADAPTER_NAME_LENGTH + 4 ];

BOOL GetFirstRFEthernetSignalStrength(int* pSignalStrength, int* pSignalQuality)
{
   BOOL retval = FALSE;
   int   nRet;

   // Get the size of the adapters list.
   DWORD size = 0;

   GetAdaptersInfo( NULL, &size );

    // Allocate space for the list.
   IP_ADAPTER_INFO *info =
      (IP_ADAPTER_INFO*)new char[ size ];

   DWORD err;
   if ((err = GetAdaptersInfo(info, &size )) == NO_ERROR )
   {
      IP_ADAPTER_INFO *cinfo = info;
      while ( cinfo )
      {
         // Check the interface media type for
         // Ethernet, which both
         // standard Ethernet and RF Ethernet will return.
         if ( cinfo->Type == MIB_IF_TYPE_ETHERNET )
         {
            MultiByteToWideChar( CP_ACP, 0, cinfo->AdapterName, -1,
               wName, sizeof( wName ) / sizeof( wName[ 0 ] ) );

            // Try to get the signal strength.
            //If it works, we
            // return the information.
            //If not, we move on.
            if (wcscmp(wName, TEXT("NETWLAN1")) == 0)// ||		// standard name for Symbol driver
//                (wcscmp(wName, TEXT("Wireless 802.11g")) == 0))
            {
               if (hLib == NULL)
                  hLib = LoadLibrary(L"mudll.dll");             // load the symbol library
	            if (hLib == NULL)                               // if the library isn't loaded
		            hLib = LoadLibrary(TEXT("s24mudll.dll"));   // load it
            	if (hLib == NULL)                               // if it failed to load...
                  return 0;                                     // close

               nRet = GetSymbolSignalStrength(wName, pSignalQuality);
            }
            else
               nRet = GetSignalStrength(wName, pSignalStrength, pSignalQuality);
            if (nRet == S_OK )
            {
               retval = TRUE;
               break;
            }
         }

         // Go to the next adapter in the list.
         cinfo = cinfo->Next;
      }
   }

   // Don't forget to delete the allocation.
   delete [] info;

   return retval;
}

Besten Dank
Dirk

3.971 Beiträge seit 2006
vor 15 Jahren

[Hinweis] Wie poste ich richtig? Punkt 4

Das Stichwort nennt sich P/Invoke

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

4.506 Beiträge seit 2004
vor 15 Jahren

Hallo Dirk,

das Beste ist, Du erstellst Dir aus dem Code ne C++ Dll. Dazu kannst Du ein neues VS C++ Projekt erstellen (Library), diesen Code einfügen, einen Header dazu bauen und Kompilieren lassen.

Danach kannst Du die Dll in Dein C# Projekt einbinden und benutzen. Alles andere scheint mir zu kompliziert (auf den ersten Blick).

Ein Portieren wäre der Königsweg (also den C++ Code manuell in C# neu schreiben), aber ich weiß nicht mit welchen Abhängigkeiten der Code arbeitet, und ob diese dann so einwandfrei sich in einem C# Projekt verwenden lassen.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

V
86 Beiträge seit 2008
vor 15 Jahren

Oder, falls du schon eine DLL schreibst, kannst du sie auch gleich als managed C++ schreiben, damit auf deinen alten C++ Code zugreifen und im Visual Studio das C++ Projekt einfach als Projekt-Referenz im C# Code mit einbindest und ganz normal verwendest.

D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 15 Jahren

Hallo,
danke für die Antworten. Leider kenne ich mich mit C++ nicht aus. Ich hebe nun probiert eine DLL zu kompilieren, aber habe keinen blassen schimmer. kann mir denn jemand diese mit dem Code erstellen?
Besten Dank Dirk

4.506 Beiträge seit 2004
vor 15 Jahren

Hallo dimuwe,

kann mir denn jemand diese mit dem Code erstellen?

Das werden einige hier im Forum können (ich auch), aber es wird wohl keiner realisieren. Ich muss ehrlich sagen, es ist nicht sonderlich schwer, da wirklich nur C++ Grundkenntnisse gefordert sind, und wenn Du schon Programmierkenntnisse hast wirst Du Dich relativ schnell in solch eine Materie einarbeiten können.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 15 Jahren

Hallo, ich habe mich etwas verkehrt ausgedrückt. Ich benötige nur etwas hilfe, wie man den header erstellt und was man includen muss. Besten Dank Dirk

C
401 Beiträge seit 2007
vor 15 Jahren

Sicher, dass das C++ ist? Für mich sieht das eher nach C aus... Keinerlei Objektorientierung erkenntlich.

1.665 Beiträge seit 2006
vor 15 Jahren

Für mich sieht das eher nach C aus... Keinerlei Objektorientierung erkenntlich.

Dann mach nochmal die Augen auf 🙂

Da sind einige Dinge drin, die in C nicht möglich sind. Ansonsten ist die Syntax der beiden Sprachen eh gleich, wie C# auch, nur etwas abgewandelt. Aber das hat C-Dialekt nun mal so an sich 🙂

C
401 Beiträge seit 2007
vor 15 Jahren

Für mich sieht das eher nach C aus... Keinerlei Objektorientierung erkenntlich.
Dann mach nochmal die Augen auf 🙂

Da sind einige Dinge drin, die in C nicht möglich sind. Ansonsten ist die Syntax der beiden Sprachen eh gleich, wie C# auch, nur etwas abgewandelt. Aber das hat C-Dialekt nun mal so an sich 🙂

Dann hilf mir doch mal auf die Sprünge...

edit: Nicht falsch verstehen.. möchte nur gerne wissen, was es ist^

3.971 Beiträge seit 2006
vor 15 Jahren

Delete[] beispielsweise gibts nur in C++

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

1.361 Beiträge seit 2007
vor 15 Jahren
   
GetAdaptersInfo( NULL, &size );
...
DWORD err;

geht ebenfalls in C nicht. (Erst Variablen deklarieren, dann den rest)

C
401 Beiträge seit 2007
vor 15 Jahren

Okay... Danke... hatte ich übersehen^^

Aber trotzdem fällt mir dabei die fehlende Objektorientierung auf, was C++ ja eigentlich den "Vorteil" gegenüber C verleiht.

F
10.010 Beiträge seit 2004
vor 15 Jahren

Für mich sieht das aus, wie ein paar hilfsfunktionen um die Signalstärke einer WLan verbindung zu lesen.

Wozu da OOP?

Aber unter .NET wäre das mit WMI natürlich deuutlich einfacher zu lösen.

C
401 Beiträge seit 2007
vor 15 Jahren

Wozu da OOP?

Weil das der Sinn einer OOP fähigen Sprache ist.

F
10.010 Beiträge seit 2004
vor 15 Jahren

Nein.
Schon mal von KISS gehört?

Man sollte seine Werkzeuge immer so einsetzen, das sie maximalen Nutzen bringen,
nicht das sie Maximal benutzt werden.

C
401 Beiträge seit 2007
vor 15 Jahren

Naja... das ist jetzt wieder eine Sache über die man sich streiten kann. Meiner Meinung nach sollte man eine Objektorientierte Sprache auch dementsprechend nutzen.

F
10.010 Beiträge seit 2004
vor 15 Jahren

Bin ich deiner Meinung, aber man muss es nicht übertreiben.

C
401 Beiträge seit 2007
vor 15 Jahren

Naja... mit übertreiben hat das weniger zu tun. Eher mit konsequentem durchführen eines Konzepts.

1.665 Beiträge seit 2006
vor 15 Jahren

Irgendwo ist auch gut mit dem Thema.
Interessiert hier keinen was du kennst, da es um was ganz anderes in dem Topic geht.
Für kleinere Sachen muss nicht immer der volle OO Weg eingeschlagen werden, wenn es sich auch anders einfach löst.
Du nimmst dir auch nicht extra einen Wasserkasten, nur um 2 Flaschen zu transportieren, falls du verstehst.

C
401 Beiträge seit 2007
vor 15 Jahren

Da hat sich aber einer unter Kontrolle... Ich entschuldige mich dafür, dass ich hier Offtopic gepostet habe, aber bestimmt nicht dafür, dass ich meine Meinung gesagt habe. Das hier ist ein Forum und dazu da um zu diskutieren, wenn du ein Problem damit hast, dann ignoriere meine Beiträge, aber fang nicht an mich anzugreifen.

D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 15 Jahren

Hallo FZelle,

genau darum geht es. Ich hatte folgendes Code für ein Gerät mit WLAN, CE, CF2 benutzen wollen.


            NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
            WirelessZeroConfigNetworkInterface wzcInterface = null;


            foreach ( NetworkInterface ni in interfaces )
            {
                System.Console.WriteLine( string.Format( "===========\r\nInterface {0}\r\n===========", ni.Id ) );
                System.Console.WriteLine( string.Format( " Type: {0}", ni.GetType().Name ) );
                System.Console.WriteLine( string.Format( " Name: {0}", ni.Name ) );
                System.Console.WriteLine( string.Format( " Description: {0}", ni.Description ) );
                System.Console.WriteLine( string.Format( " Network Interface Type: {0}", ni.NetworkInterfaceType.ToString() ) );
                PhysicalAddress address = ni.GetPhysicalAddress();
                System.Console.WriteLine( string.Format( " MAC: {0}", address == null ? "{none}" : address.ToString() ) );
                System.Console.WriteLine( string.Format( " Operational Status: {0}", ni.OperationalStatus.ToString() ) );
                System.Console.WriteLine( string.Format( " Speed: {0}bps", ni.Speed ) );
                System.Console.WriteLine( string.Format( " *Interface Operational Status: {0}", ni.InterfaceOperationalStatus.ToString() ) );
                System.Console.WriteLine( string.Format( " *Current IP: {0}", ni.CurrentIpAddress.ToString() ) );
                System.Console.WriteLine( string.Format( " *Current Subnet: {0}", ni.CurrentSubnetMask.ToString() ) );

                IPInterfaceProperties ipProps = ni.GetIPProperties();
                System.Console.WriteLine( "\r\n IP Properties\r\n -------------" );

                #region --- Server Lists ---
                if ( ipProps.DhcpServerAddresses.Count > 0 )
                {
                    for ( int i = 0; i < ipProps.DhcpServerAddresses.Count; i++ )
                    {
                        System.Console.WriteLine( string.Format( " DHCP Server {0}: {1}", i, ipProps.DhcpServerAddresses[i].ToString() ) );
                    }
                }
                else
                {
                    System.Console.WriteLine( " No DHCP Servers" );
                }

                if ( ipProps.DnsAddresses.Count > 0 )
                {
                    for ( int i = 0; i < ipProps.DnsAddresses.Count; i++ )
                    {
                        System.Console.WriteLine( string.Format( " DNS Server {0}: {1}", i, ipProps.DnsAddresses[i].ToString() ) );
                    }
                }
                else
                {
                    System.Console.WriteLine( " No DNS Servers" );
                }

                if ( ipProps.GatewayAddresses.Count > 0 )
                {
                    for ( int i = 0; i < ipProps.GatewayAddresses.Count; i++ )
                    {
                        System.Console.WriteLine( string.Format( " Gateway {0}: {1}", i, ipProps.GatewayAddresses[i].Address.ToString() ) );
                    }
                }
                else
                {
                    System.Console.WriteLine( " No Gateways" );
                }

                if ( ipProps.WinsServersAddresses.Count > 0 )
                {
                    for ( int i = 0; i < ipProps.WinsServersAddresses.Count; i++ )
                    {
                        System.Console.WriteLine( string.Format( " WINS Server {0}: {1}", i, ipProps.WinsServersAddresses[i].ToString() ) );
                    }
                }
                else
                {
                    System.Console.WriteLine( " No WINS Servers" );
                }
                #endregion

                #region --- Unicast Addresses ---
                if ( ipProps.UnicastAddresses.Count > 0 )
                {
                    for ( int i = 0; i < ipProps.UnicastAddresses.Count; i++ )
                    {
                        System.Console.WriteLine( string.Format( " Unicast address {0}: {1}", i, ipProps.UnicastAddresses[i].Address.ToString() ) );
                        System.Console.WriteLine( string.Format( " Address Family: {0}", ipProps.UnicastAddresses[i].Address.AddressFamily ) );

                        if ( ipProps.UnicastAddresses[i].Address.AddressFamily == AddressFamily.InterNetworkV6 )
                        {
                            System.Console.WriteLine( string.Format( " Scope ID: {0}", ipProps.UnicastAddresses[i].Address.ScopeId ) );
                        }
                        else // ipv4
                        {
                            System.Console.WriteLine( string.Format( " IPv4 Mask: {0}", ipProps.UnicastAddresses[i].IPv4Mask == null
                                    ? "{none}" : ipProps.UnicastAddresses[i].IPv4Mask.ToString() ) );
                        }
                        System.Console.WriteLine( string.Format( " Preferred Limetime: {0}", ipProps.UnicastAddresses[i].AddressPreferredLifetime ) );
                        System.Console.WriteLine( string.Format( " Valid Limetime: {0}", ipProps.UnicastAddresses[i].AddressValidLifetime ) );
                        System.Console.WriteLine( string.Format( " DHCP Lease Limetime: {0}", ipProps.UnicastAddresses[i].DhcpLeaseLifetime ) );
                        System.Console.WriteLine( string.Format( " DAD State: {0}", ipProps.UnicastAddresses[i].DuplicateAddressDetectionState ) );
                        System.Console.WriteLine( string.Format( " {0} DNS Eligible", ipProps.UnicastAddresses[i].IsDnsEligible ? "IS" : "IS NOT" ) );
                        System.Console.WriteLine( string.Format( " {0} Transient", ipProps.UnicastAddresses[i].IsTransient ? "IS" : "IS NOT" ) );
                        System.Console.WriteLine( string.Format( " Prefix Origin: {0}", ipProps.UnicastAddresses[i].PrefixOrigin.ToString() ) );
                        System.Console.WriteLine( string.Format( " Suffix Origin: {0}", ipProps.UnicastAddresses[i].SuffixOrigin.ToString() ) );
                    }
                }
                else
                {
                    System.Console.WriteLine( " No Unicast addresses" );
                }
                #endregion

                #region --- Anycast Addresses ---
                if ( ipProps.AnycastAddresses.Count > 0 )
                {
                    for ( int i = 0; i < ipProps.AnycastAddresses.Count; i++ )
                    {
                        System.Console.WriteLine( string.Format( " Anycast address {0}: {1}", i, ipProps.AnycastAddresses[i].Address.ToString() ) );
                        System.Console.WriteLine( string.Format( " Address Family: {0}", ipProps.AnycastAddresses[i].Address.AddressFamily ) );
                        if ( ipProps.AnycastAddresses[i].Address.AddressFamily == AddressFamily.InterNetworkV6 )
                        {
                            System.Console.WriteLine( string.Format( " Scope ID: {0}", ipProps.AnycastAddresses[i].Address.ScopeId ) );
                        }
                        System.Console.WriteLine( string.Format( " {0} DNS Eligible", ipProps.UnicastAddresses[i].IsDnsEligible ? "IS" : "IS NOT" ) );
                        System.Console.WriteLine( string.Format( " {0} Transient", ipProps.UnicastAddresses[i].IsTransient ? "IS" : "IS NOT" ) );
                    }
                }
                else
                {
                    System.Console.WriteLine( " No Anycast addresses" );
                }
                #endregion

                #region --- Multicast Addresses ---
                if ( ipProps.MulticastAddresses.Count > 0 )
                {
                    for ( int i = 0; i < ipProps.MulticastAddresses.Count; i++ )
                    {
                        System.Console.WriteLine( string.Format( " Anycast address {0}: {1}", i, ipProps.MulticastAddresses[i].Address.ToString() ) );
                        System.Console.WriteLine( string.Format( " Address Family: {0}", ipProps.MulticastAddresses[i].Address.AddressFamily ) );
                        if ( ipProps.MulticastAddresses[i].Address.AddressFamily == AddressFamily.InterNetworkV6 )
                        {
                            System.Console.WriteLine( string.Format( " Scope ID: {0}", ipProps.MulticastAddresses[i].Address.ScopeId ) );
                        }
                        System.Console.WriteLine( string.Format( " {0} DNS Eligible", ipProps.MulticastAddresses[i].IsDnsEligible ? "IS" : "IS NOT" ) );
                        System.Console.WriteLine( string.Format( " {0} Transient", ipProps.MulticastAddresses[i].IsTransient ? "IS" : "IS NOT" ) );
                    }
                }
                else
                {
                    System.Console.WriteLine( " No Multicast addresses" );
                }
                #endregion

                #region --- IPv4 Stats ---
                IPv4InterfaceStatistics ipstats = ni.GetIPv4Statistics();
                System.Console.WriteLine( "\r\n IPv4 Statistics\r\n -------------" );
                System.Console.WriteLine( string.Format( " Bytes Received: {0}", ipstats.BytesReceived ) );
                System.Console.WriteLine( string.Format( " Bytes Sent: {0}", ipstats.BytesSent ) );
                System.Console.WriteLine( string.Format( " Incoming Packets Discarded: {0}", ipstats.IncomingPacketsDiscarded ) );
                System.Console.WriteLine( string.Format( " Incoming Packets with errors: {0}", ipstats.IncomingPacketsWithErrors ) );
                System.Console.WriteLine( string.Format( " Incoming Packets Unk. Protocol: {0}", ipstats.IncomingUnknownProtocolPackets ) );
                System.Console.WriteLine( string.Format( " Non Unicast Packets Received: {0}", ipstats.NonUnicastPacketsReceived ) );
                System.Console.WriteLine( string.Format( " Non Unicast Packets Sent: {0}", ipstats.NonUnicastPacketsSent ) );
                System.Console.WriteLine( string.Format( " Outgoing Packets Discarded: {0}", ipstats.OutgoingPacketsDiscarded ) );
                System.Console.WriteLine( string.Format( " Outgoing Packets With Errors: {0}", ipstats.OutgoingPacketsWithErrors ) );
                System.Console.WriteLine( string.Format( " Output Queue Length: {0}", ipstats.OutputQueueLength ) );
                System.Console.WriteLine( string.Format( " Unicast Packets Received: {0}", ipstats.UnicastPacketsReceived ) );
                System.Console.WriteLine( string.Format( " Unicast Packets Sent: {0}", ipstats.UnicastPacketsSent ) );
                #endregion

                #region --- IPv4 Properties ---
                IPv4InterfaceProperties ipv4props = ipProps.GetIPv4Properties();
                System.Console.WriteLine( "\r\n IPv4 Properties\r\n -------------" );
                System.Console.WriteLine( string.Format( " Index: {0}", ipv4props.Index ) );
                System.Console.WriteLine( string.Format( " Auto Addressing {0}", ipv4props.IsAutomaticPrivateAddressingActive
                    ? "ACTIVE" : "INACTIVE" ) );
                System.Console.WriteLine( string.Format( " Auto Addressing {0}", ipv4props.IsAutomaticPrivateAddressingEnabled
                    ? "ENABLED" : "DISABLED" ) );
                System.Console.WriteLine( string.Format( " DHCP {0}", ipv4props.IsDhcpEnabled ? "ENABLED" : "DISABLED" ) );
                System.Console.WriteLine( string.Format( " MTU: {0}", ipv4props.Mtu ) );
                System.Console.WriteLine( string.Format( " {0} use WINS", ipv4props.UsesWins ? "DOES" : "DOES NOT" ) );
                #endregion

                if ( ni is WirelessZeroConfigNetworkInterface )
                {
                    WirelessZeroConfigNetworkInterface wzc = ( WirelessZeroConfigNetworkInterface )ni;

                    // save for later operations
                    wzcInterface = wzc;

                    System.Console.WriteLine( "\r\n *WZC Properties\r\n -------------" );
                    System.Console.WriteLine( string.Format( " *Associated AP: {0}", wzc.AssociatedAccessPoint ) );
                    System.Console.WriteLine( string.Format( " *Associated AP MAC: {0}", wzc.AssociatedAccessPointMAC ) );
                    System.Console.WriteLine( string.Format( " *Authentication Mode: {0}", wzc.AuthenticationMode.ToString() ) );
                    System.Console.WriteLine( string.Format( " *WZC Fallback Enabled: {0}", wzc.FallbackEnabled ) );
                    System.Console.WriteLine( string.Format( " *WEP Status: {0}", wzc.WEPStatus ) );
                    System.Console.WriteLine( string.Format( " *Signal Strength: {0}db ({1})", wzc.SignalStrength.Decibels,
                            wzc.SignalStrength.Strength.ToString() ) );
                    System.Console.WriteLine( string.Format( " *Authentication Mode: {0}", wzc.AuthenticationMode.ToString() ) );
                    System.Console.WriteLine( string.Format( " *Infrastructure Mode: {0}", wzc.InfrastructureMode.ToString() ) );
                    System.Console.WriteLine( string.Format( " *WEP Status: {0}", wzc.WEPStatus.ToString() ) );
                    foreach ( int rate in wzc.SupportedRates )
                    {
                        System.Console.WriteLine( string.Format( " *Supports {0}kbps", rate ) );
                    }
                    System.Console.WriteLine( string.Format( " *Radio ATIM Window: {0}Kµsec", wzc.RadioConfiguration.ATIMWindow ) );
                    System.Console.WriteLine( string.Format( " *Radio beacon Period: {0}Kµsec", wzc.RadioConfiguration.BeaconPeriod ) );
                    System.Console.WriteLine( string.Format( " *Radio Frequency: {0}kHz", wzc.RadioConfiguration.Frequency ) );
                    System.Console.WriteLine( string.Format( " *Radio Frequency Hop Dwell Time: {0}Kµsec",
                            wzc.RadioConfiguration.FrequencyHopDwellTime ) );
                    System.Console.WriteLine( string.Format( " *Radio Frequency Hop Pattern: {0}", wzc.RadioConfiguration.FrequencyHopPattern ) );
                    System.Console.WriteLine( string.Format( " *Radio Frequency Hop Set: {0}", wzc.RadioConfiguration.FrequencyHopSet ) );

                    #region --- Preferred APs ---
                    if ( wzc.PreferredAccessPoints.Count > 0 )
                    {
                        System.Console.WriteLine( "\r\n *Preferred APs\r\n -------------" );
                        foreach ( AccessPoint ap in wzc.PreferredAccessPoints )
                        {
                            System.Console.WriteLine( string.Format( " *SSID: {0}", ap.Name ) );
                            System.Console.WriteLine( string.Format( " *MAC {0}", ap.PhysicalAddress.ToString() ) );
                            System.Console.WriteLine( string.Format( " *Mode {0}", ap.InfrastructureMode.ToString() ) );
                            System.Console.WriteLine( string.Format( " *Network Type {0}", ap.NetworkTypeInUse.ToString() ) );
                            System.Console.WriteLine( string.Format( " *Privacy {0}", ap.Privacy ) );
                            System.Console.WriteLine( string.Format( " *Signal Strength: {0}db ({1})", ap.SignalStrength.Decibels,
                                    ap.SignalStrength.Strength.ToString() ) );
                            // supported rates
                            foreach ( int rate in ap.SupportedRates )
                            {
                                System.Console.WriteLine( string.Format( " *Supports {0}kbps", rate ) );
                            }
                        }
                    }
                    else
                    {
                        System.Console.WriteLine( "\r\n *No Preferred APs" );
                    }
                    #endregion
                    #region --- Nearby APs ---
                    if ( wzc.NearbyAccessPoints.Count > 0 )
                    {
                        System.Console.WriteLine( "\r\n *Nearby APs\r\n -------------" );
                        foreach ( AccessPoint ap in wzc.NearbyAccessPoints )
                        {
                            System.Console.WriteLine( string.Format( " *SSID: {0}", ap.Name ) );
                            System.Console.WriteLine( string.Format( " *MAC {0}", ap.PhysicalAddress.ToString() ) );
                            System.Console.WriteLine( string.Format( " *Mode {0}", ap.InfrastructureMode.ToString() ) );
                            System.Console.WriteLine( string.Format( " *Network Type {0}", ap.NetworkTypeInUse.ToString() ) );
                            System.Console.WriteLine( string.Format( " *Privacy {0}", ap.Privacy ) );
                            System.Console.WriteLine( string.Format( " *Signal Strength: {0}db ({1})", ap.SignalStrength.Decibels,
                                    ap.SignalStrength.Strength.ToString() ) );
                            // supported rates
                            foreach ( int rate in ap.SupportedRates )
                            {
                                System.Console.WriteLine( string.Format( " *Supports {0}kbps", rate ) );
                            }
                        }
                    }
                    else
                    {
                        System.Console.WriteLine( "\r\n *No Nearby APs" );
                    }
                    #endregion
                    #region --- Preferred APs ---
                    if ( wzc.NearbyPreferredAccessPoints.Count > 0 )
                    {
                        System.Console.WriteLine( "\r\n *Preferred Nearby APs\r\n -------------" );
                        foreach ( AccessPoint ap in wzc.NearbyPreferredAccessPoints )
                        {
                            System.Console.WriteLine( string.Format( " *SSID: {0}", ap.Name ) );
                            System.Console.WriteLine( string.Format( " *MAC {0}", ap.PhysicalAddress.ToString() ) );
                            System.Console.WriteLine( string.Format( " *Mode {0}", ap.InfrastructureMode.ToString() ) );
                            System.Console.WriteLine( string.Format( " *Network Type {0}", ap.NetworkTypeInUse.ToString() ) );
                            System.Console.WriteLine( string.Format( " *Privacy {0}", ap.Privacy ) );
                            System.Console.WriteLine( string.Format( " *Signal Strength: {0}db ({1})", ap.SignalStrength.Decibels,
                                    ap.SignalStrength.Strength.ToString() ) );
                            // supported rates
                            foreach ( int rate in ap.SupportedRates )
                            {
                                System.Console.WriteLine( string.Format( " *Supports {0}kbps", rate ) );
                            }
                        }
                    }
                    else
                    {
                        System.Console.WriteLine( "\r\n *No Nearby Preferred APs" );
                    }
                    #endregion
                }
              else if ( ni is WirelessNetworkInterface )
                if ( ni is WirelessNetworkInterface )
                {
                    WirelessNetworkInterface wni = ( WirelessNetworkInterface )ni;

                    System.Console.WriteLine( "\r\n *Wireless Properties\r\n -------------" );
                    System.Console.WriteLine( string.Format( " *Associated AP: {0}", wni.AssociatedAccessPoint ) );
                    System.Console.WriteLine( string.Format( " *Associated AP MAC: {0}", wni.AssociatedAccessPointMAC ) );
                    System.Console.WriteLine( string.Format( " *Signal Strength: {0}db ({1})", wni.SignalStrength.Decibels,
                        wni.SignalStrength.Strength.ToString() ) );
                    System.Console.WriteLine( string.Format( " *Authentication Mode: {0}", wni.AuthenticationMode.ToString() ) );
                    System.Console.WriteLine( string.Format( " *Infrastructure Mode: {0}", wni.InfrastructureMode.ToString() ) );
                    System.Console.WriteLine( string.Format( " *WEP Status: {0}", wni.WEPStatus.ToString() ) );
                    foreach ( int rate in wni.SupportedRates )
                    {
                        System.Console.WriteLine( string.Format( " *Supports {0}kbps", rate ) );
                    }
                    System.Console.WriteLine( string.Format( " *Radio ATIM Window: {0}Kµsec", wni.RadioConfiguration.ATIMWindow ) );
                    System.Console.WriteLine( string.Format( " *Radio beacon Period: {0}Kµsec", wni.RadioConfiguration.BeaconPeriod ) );
                    System.Console.WriteLine( string.Format( " *Radio Frequency: {0}kHz", wni.RadioConfiguration.Frequency ) );
                    System.Console.WriteLine( string.Format( " *Radio Frequency Hop Dwell Time: {0}Kµsec",
                            wni.RadioConfiguration.FrequencyHopDwellTime ) );
                    System.Console.WriteLine( string.Format( " *Radio Frequency Hop Pattern: {0}", wni.RadioConfiguration.FrequencyHopPattern ) );
                    System.Console.WriteLine( string.Format( " *Radio Frequency Hop Set: {0}", wni.RadioConfiguration.FrequencyHopSet ) );
                }
            } // foreach (NetworkInterface ni in interfaces)

            if ( wzcInterface != null )
            {
                byte[] key = null;
                bool b = wzcInterface.AddPreferredNetwork( "MyOpenNetwork1", true, key, 1, AuthenticationMode.Open,
                        WEPStatus.WEPDisabled, null );
                b = wzcInterface.AddPreferredNetwork( "MyOpenNetwork2", true, key, 1, AuthenticationMode.Open,
                        WEPStatus.WEPDisabled, null );
                b = wzcInterface.AddPreferredNetwork( "MyOpenNetwork3", true, key, 1, AuthenticationMode.Open,
                        WEPStatus.WEPDisabled, null );
            }

nun gib es aber das Problem das kein WLAN Adapter erkannt wird. Auf Grund dessen habe ich von dem Entwickler des Gerätes den Code geschickt. Ob C oder C++, ich möchte diesen so verwenden oder vielleicht den C# Code so umschreiben das die WLAN Karte erkannt wird und ich die Signalstärke auslesen kann.
Besten dank
Dirk

3.971 Beiträge seit 2006
vor 15 Jahren

Edit auf Norman_Timo`s Nachpost.

Wenn du unbedingt die Hersteller Dll nehmen willst oder sogar musst, kannst du P/Invoke (DllImport) zur Einbettung der Dll nutzen. Die Funktionsrümpfe sehen alle nach (standard) C aus.

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

4.506 Beiträge seit 2004
vor 15 Jahren

Hallo dimuwe,

manchmal hilft es allerdings, wenn man zunächst das eigentliche Problem beschreibt, nämlich, dass Du versuchst die Signalstärke für WLan zu ermitteln, denn dann könnte man Dir auch Alternativen vorschlagen.

Ich denke, ähnlich wie FZelle, und meine, dass es einfacher gehen muss eine Signalstärke zu ermitteln:
VB-Archiv - Signalstärke ermitteln

Der gepostete Link enthält zwar vb5/vb6 Code, allerdings ist das Kernstück eine WMI Abfrage, die wohl sehr leicht in C# zu portieren wäre. Der Rest des Codes ist lediglich die Anzeige der Signalstärke...

Also ich würde WMI einsetzen, so wie FZelle schon vorher geschrieben hatte.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 15 Jahren
Re

Hallo,
danke für die Antworten. Ich gebe Euch natürlich recht.
Wenn es mit WMI so einfach geht, wäre ja nicht schlecht aber
was für mich wichtig ist wäre die tatsache das es mit dem CF2 funktioniert.

Gruß
Dirk

4.506 Beiträge seit 2004
vor 15 Jahren

Hallo dimuwe,

was für mich wichtig ist wäre die tatsache das es mit dem CF2 funktioniert.

Ich kenne mich damit nicht aus, hast Du nun ausprobiert, obs funktioniert?

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 15 Jahren

Hallo norman_timo,

ja habe ich. und es geht schon beim verweis los.
Set oWMI = Microsoft.VisualBasic.Interaction <- bis hierhin alles gut, aber GetObject gibt es nicht.

gruß
Dirk

4.506 Beiträge seit 2004
vor 15 Jahren

Hallo dimuwe,

Du machst es einem wirklich nicht leicht, oder?

Hier findest Du einen WMI Code Generator
[Tipp] WMI Code Generator

Aus dem vorigen Beispiel wirst Du den Zugrifsschlüssel entnehmen können, und mit dem WMI Generator kannst Du dann fertigen C# Code generieren lassen.

Spaßeshalber kannst Du Dir dann auch den Unterschied zwischen dem Generator-Ergebnis und dem vb5/vb6 Code anschauen.

-> Es ist immer gut auch über den Tellerrand hinweg zu schauen, und zu wissen, was denn andere Technologien/Programmiersprachen so können. Denn man nimmt auch nicht unbedingt die Kneifzange um eine Schraube ins Metall zu drehen 😉

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 15 Jahren

Hallo norman_timo,
leider ist es auch nicht leicht. Mit diesem generator kann ich wunderbar Framework code generieren, aber nicht für das CF und das ist ja nun mal anders. Wie gesagt der C# Code oben funktioniert ja auf dem gerät nur der Adapter wird nicht als Wireless erkannt und somit auch keine Signalstärke.
Ich werde langsam reif für die Klapse, aber naja

Gruß
Dirk

F
10.010 Beiträge seit 2004
vor 15 Jahren

Weder das WMI noch das Beispiel oben wird auf dem CF2 Funktionieren.

In zukunft solltest DU das auf gleich angeben, denn das ist schon ziemlich wichtig, da es eine ungeheure einschränkung darstellt.

Und wie (fast) immer gibt es im OpenNetCF eine lösung dazu:
http://blog.opennetcf.org/ctacke/binary/WiFiDiscovery.htm

D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 15 Jahren

Hallo FZelle,
da hast Du wohl Recht, aber der C# - Code oben ist auch ein beispiel in Verbindung mit OpenNETCF.
Der Link von Dir verweist aber auf alte namespaces von OpenNETCF.
Warnung 1 "OpenNETCF.Net.AdapterCollection" ist veraltet: "This class is obsolete and will be removed in a future version of the SDF. Consider using OpenNETCF.Net.NetworkInformation.NetworkInterface or one of its subclasses instead"
Der Code funktioniert, aber


if ( wireless )
            {

gibt nur false wieder
Nun ist das wieder das Problem, das bei dem obigen Beispiel und bei dem Code von Dir halt der Adapter (CF-Karte) nicht als Wireless erkannt wird.

Ich drehe gleich durch.
Gruß
Dirk