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?
late binding
5 svar · 547 visningar · startad av aleborg
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.
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
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.
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
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!