Konwersja z C do C#

0

Mam przykład w C i nie wiem jak go przerobić na kod C# aby cała funkcjonalnośc się zachowała. Proszę o wyrozumiałość bo z programowaniem dopiero zaczynam zabawę.

Na chwilę obecną wyszukalem, że define mogę zamienić na C#'powe const

devlink.h

#ifndef _DEVLINK_H_
#define _DEVLINK_H_

typedef char TEXT;

#define DEVLINK_SUCCESS				0
#define DEVLINK_UNSPECIFIEDFAIL		1
#define DEVLINK_LICENCENOTFOUND		2

#define DEVLINK_COMMS_OPERATIONAL	0
#define DEVLINK_COMMS_NORESPONSE	1
#define DEVLINK_COMMS_REJECTED		2
#define DEVLINK_COMMS_MISSEDPACKETS	3

#ifdef __cplusplus
extern "C"
{
#endif

typedef void (CALLBACK * CALLLOGEVENT) ( DWORD pbxh, TEXT * info );
typedef void (CALLBACK * COMMSEVENT) ( DWORD pbxh, DWORD comms_state, WORD parm1 );

LONG PASCAL DLOpen( DWORD pbxh, TEXT * pbx_address, TEXT * pbx_password, TEXT * reserved1, TEXT * reserved2, COMMSEVENT cb);
LONG PASCAL DLClose( DWORD pbxh );
LONG PASCAL DLRegisterType2CallDeltas( DWORD  pbxh, CALLLOGEVENT cb );

#ifdef __cplusplus
};
#endif

#endif

devlink.c

#include <windows.h>
#include <stdio.h>
#include "devlink.h"

LONG hEvent;
DWORD dwCommsEvent;
BOOL bStarting;

void CALLBACK HandleCommsEvent( LONG pbxh, DWORD comms_evt, DWORD parm1 )
{
	switch( comms_evt )
	{
		case DEVLINK_COMMS_OPERATIONAL:
			// we are working fine... fall through
		case DEVLINK_COMMS_NORESPONSE:
			// system not found (initial connection),
			// or network connection lost (rebooted?)
			// fall through...
		case DEVLINK_COMMS_REJECTED:
			// incorrect system password specified...
			if( bStarting )
			{
				dwCommsEvent = comms_evt;
				SetEvent( hEvent );
			}
			else
			{
				// insert your code here...
			}
		break;
		case DEVLINK_COMMS_MISSEDPACKETS:
			// Indicates that the system is under
			// heavy load. IP Office always prioritises
			// data routing and call handling above CTI events.
			// (parm1 contains the number of packets missed)
		break;
	}
}

int main(int argc, char* argv[])
{
	printf( "connecting..." );
	bStarting = TRUE;
	hEvent = CreateEvent( NULL, FALSE, FALSE, NULL );
	DLOpen( 0, "255.255.255.255" "systempassword", NULL, NULL, HandleCommsEvent );
	dwCommsEvent = DEVLINK_COMMS_NORESPONSE;
	WaitForSingleObject( hEvent, 10000 ); // 10 seconds
	bStarting = FALSE;
	if ( dwCommsEvent == DEVLINK_COMMS_OPERATIONAL )
	{
		printf("Connected OK\n");
	}
	else
	{
		printf("Error connecting to IP Office\n");
	}
	DLClose( 0 );
	CloseHandle( hEvent );
	return 0;
}
0

To faktycznie dużo wyszukałeś.

Jak dla mnie, trzeba wiedzieć więcej o bibliotece, którą używasz, żeby dokonać takiej konwersji. Za dużo tutaj rzeczy, które dwojako można rozumieć.

0
proszący o pomoc napisał(a)
#ifndef _DEVLINK_H_
#define _DEVLINK_H_        //chcialbym zobaczyc jak to zmienisz na C#owe CONST..
0

biblioteka sluzy do polaczenia sie z centralka telefoniczna a nastepnie zwracane sa w real-time wszystkie zdarzenia na niej. powyzszy kod to przyklad ze strony producenta centralki.

cała DLL'ka to 3 funkcje

LONG PASCAL DLOpen( DWORD pbxh, TEXT * pbx_address, TEXT * pbx_password, TEXT * reserved1, TEXT * reserved2, COMMSEVENT cb);
LONG PASCAL DLClose( DWORD pbxh );
LONG PASCAL DLRegisterType2CallDeltas( DWORD  pbxh, CALLLOGEVENT cb );

już czesc konwersji zrobilem tylko ze wskaznikami TEXT* nie moge sobie dac rady w jaki sposob je w C# napisac oraz mam problem z CALLBACK w jaki sposob zrealizowac w C#

0

TEXT* to zwykly System::String albo ew. BSTR
callbacki zas po stronie .Net'a zwykle implementuje sie jako delegaty (delegate), 'słówka kluczowego' CALLBACK nie bedziesz potrzebowal w ogole

0

dzięki za podpowiedzi...

wstępnie mogę powiedzieć - działa... ALE...

wszo napisane jest w VS2008Pro (C#) pod Vista 64-bit ale kompilacja samego programu x86

jak odpale pod Windows XP to programik działa prawidłowo i funkcje delegate działają i zwracają to co mają zwracać, natomiast pod Vistą programik odpala się ale nie zwraca nic oraz błędów też żadnych nie daje... progamu zbudować pod 64bit nie mogę bo biblioteka dll jest 32 bit chyba ze jest jakiś sposób...

jakieś pomysły? czy to problem Visty?

0

A gdy zrobisz build do Any CPU, to też nie działa?

0

Windows Vista Business 64-bit SP1

Any CPU

  • program startuje
  • w momencie ładowania funkcji z biblioteki wyskakuje:

Próbowano załadować program w niepoprawnym formacie. (Wyjątek od HRESULT: 0x8007000B)

x86

  • program startuje
  • w momencie ładowania funkcji z biblioteki nie pokazuje żadnych błędów oraz funkcje delegate nic nie zwracają</u>

x64

  • program startuje
  • w momencie ładowania funkcji z biblioteki wyskakuje:

Próbowano załadować program w niepoprawnym formacie. (Wyjątek od HRESULT: 0x8007000B)

Windows XP Professional 32-bit SP3
x86

  • program startuje
  • w momencie ładowania funkcji z biblioteki funkcje delegate działają prawidłowo

1 użytkowników online, w tym zalogowanych: 0, gości: 1