webForumDet fria alternativet

late binding

5 svar · 547 visningar · startad av aleborg

aleborgMedlem sedan jan. 20013 341 inlägg
#1

Jag sitter med ett litet problem, faktureringsprogrammet vi använder kräver att man kör med "late binding" när man programmerar mot API:et från C#.
Hur mycket extra jobb är det att köra med late binding istället för early binding?
Är det ens värt det eller ska vi skaffa nytt faktureringsprogram?

JonMedlem sedan juli 20011 304 inlägg
#2

Menar du jobbig kod med mera jobb? Det är inte särskilt myclet eller svår kod :)

Eller menar du att det kommer att bli slöare? I så fall: Ja men det borde inte vara ett problem om det inte är jättemycket jobb med jättemånga object som skapas.

GladhMedlem sedan maj 20012 812 inlägg
#3

Det är inte mer kod att binda med "late binding" än med "early binding", du gör båda sakerna på 1-2 rader beroende på hur du kodar.

Visst tar det lite av prestandan att göra "late binding" men har man inget val så har man inte, och till ett fakturasystem så lär du inte märka av den lilla prestanaförlust det blir, eftersom ett fakturasystem till 90 % av tiden handlar om inmatning och då jobbar inte applikationen speciellt mycket.

- M

aleborgMedlem sedan jan. 20013 341 inlägg
#4

Men hur skulle det se ut?
Jag har fåttt följande kod som ska ändras till C#(inget svårt) och måste köras via late binding:

Dim oGBA As Object
Dim RetValue
'Creates the GBA object
Set oGBA = CreateObject("GBAAPI.GBA")

'Specifies the data location of the chosen client
RetValue = oGBA.SetClientPath("c:\program files\mamut\data\client\000\001")
If RetValue = 0 Then
    Response = MsgBox("The path to the client data location is incorrect.", 0, "MAMUT API")
End If

'Adds the contact object to the GBA object
Dim oContact
Set oContact = oGBA.CreateContactObject()
If TypeName(oContact) <> "Object" Then
        Response = MsgBox("An error occurred during the creation of the Contact object.", 0, "MAMUT API")
End If

'Create a new contact
RetValue = oContact.CreateNew()
If RetValue = 0 Then
    Response = MsgBox("An error occurred during creation of new contact.", 0, "MAMUT API")
End If

'Make changes to a contact (after it is retrieved/created)
oContact.ContName = "Mamut Ltd"
oContact.Street = "90 Long Acre"
oContact.City = "London"
oContact.Zipcode = "WC2E 9RZ"
oContact.Data56 = 1

En COM-referens(gbaapi.exe) har lagts till i projektet.

JonMedlem sedan juli 20011 304 inlägg
#5

Om jag inte är helt nyvaken så tycker jag att det där ÄR late binding :)

Lite snabb googling för syntax i c#: http://www.c-sharpcorner.com/1/call_com.asp

aleborgMedlem sedan jan. 20013 341 inlägg
#6

Jag provade med det här:

	public class Faktura
	{
		public bool CreateFaktura()
		{
			gbaapi.gba GBA = new gbaapi.gba();
			if(GBA.setclientpath(@"\\SERVER\Mamut\Data\Client\000\001").ToString()!="0")
			{	
				gbaapi.contactClass oContact = (gbaapi.contactClass)GBA.createcontactobject();
				int RetValue = oContact.createnew();
				if(RetValue==0)
				{
					oContact.contname = "Mamut Ltd";
					oContact.street = "90 Long Acre";
					oContact.city = "London";
					oContact.zipcode = "WC2E 9RZ";
					oContact.data56 = 1;
				
					return true;
				}
				else
					return false;
			}
			else
				return false;
		}
	}

Men det går inte alls,
No overload for method 'createnew' takes '0' arguments

public virtual new System.Object createnew ( System.Int32 lnContid )
Member of gbaapi.contactClass

Det visar inte manualen nått om! Enligt deras exempel så kräver den ju inget!

129 ms totalt · 3 externa anrop · v20260731065814-full.7de19299
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)