Xlcall32.dll dosyasının Excel4v işlevine çok sayıda çağrı yapmayı içeren bir XLL eklentisi oluşturmak için Delphi kullanıyorum. Ancak, burada çok az sayıda Delphi uzmanının bu özel API ile çalıştığını tahmin ettiğim için, sorunun diğer API'larda da görüldüğünü umuyorum. DelphiDelphi'den Özel Win32 API'sini Çağırma - Neden istisnalar "asm pop ..." olmadan uçar?
int pascal Excel4v(int xlfn, LPXLOPER operRes, int count, LPXLOPER opers[]);
kullanıyorum:
function Excel4v(xlfn: Integer; operRes: LPXLOPER; count: Integer;
opers: array of LPXLOPER): Integer; stdcall; external 'xlcall32.dll';
LPXLOPER bir gösterici özellikle Microsoft Excel 2007 XLL SDK ile birlikte xlcall.h dosyasında Excel4v olarak tanımlanır C
, bir yapıya (C) veya kayıt (Delphi'de).
Delphi'de C işlevlerini bildirme üzerine ödevimi yapıyorum (this excellent article çok yardımcı oldu) ve Excel4v'yi doğru şekilde bildirdiğimi düşünüyorum. Ancak, bu işlev neden istisnalar içine Delphi kodundan çağırır onlar şu çizgi izlemektedir sürece ("erişim ihlali ..." Ben görmeye devam budur): yere tanımlanır "lavabo"
asm pop sink; end;
bir tamsayı olarak.
Montaj hakkında hiçbir fikrim yok ... Bu yüzden istisnaları "asm pop sink; end;" ile düzeltmeyi denemem mümkün olmazdı. Ama "asm pop lavabo; sonu;" gerçekten istisnaları giderir. İlk olarak onu this useful article on making XLLs using Delphi'da kullandığını gördüm. İşte en alakalı bir alıntı:..
Temelde"Delphi'den eklentilerle büyük engel yığın dönüş adresinden sonra fazladan parametre olduğunu Bu gelir her çağrısı ile serbest Excel'e Ben ve ne kadar tuttuğunu asla bulamadınız, ama 'u attığınız sürece eklentiniz iyi çalışacaktır. satır asm pop değişkeni, sonu; her aramanın değişebileceği her çağrı global, yerel veya 'un en az 4 bayt uzunluğunda tamsayı olduğu nesne değişkeni para cezasıdır. Her Excel4v çağrısından sonra DAHİL. Aksi takdirde bir zaman bomba inşa edilmektedir . "
Ben gerçekte neler anlamak istiyorum ve neden. Ne dönmek için bir Win32 işlevini neden olabilecek" getirisi adresinden sonra fazladan bir parametre yığını "ve aslında ne anlama geliyor?
farklı bir derleyici seçeneği veya işlevi bildirerek farklı bir şekilde örneğin bu, düzeltmek için başka bir yolu var olabilir mi?ve eğer bir şey arama konusunda riskli yoktur" asm pop virüsü; End "Excel4v her çağrıdan sonra ...? İyi çalışıyor gibi görünüyor, ama ne olduğunu anlamıyorum gibi, biraz tehlikeli hissettiriyor ...
Delphi'de bir XLL yazıyorum ve sizinle iletişim kurmak istiyorum. Lütfen bana e-posta gönderin [email protected] – garethm