2014-07-04 32 views
5

Excel-VBA'dan bir C++ DLL'i çağırmaya çalışıyorum.Excel VBA: "Çalışma zamanı hatası '49': bozuk DLL çağrı kuralı" arayarak C++ dll

Fputs() çağrısını yürütmek için çağrıları günlüğe kaydettirdiğimde ve günlük dosyamda damgalar görüntülendiğinde DLL işlevinin çalıştırıldığını biliyorum. Sorun DLL işlevi döner, ben burada 49.

VBA beyanıdır Error olsun her şöyledir:

Private Declare Function InitMCR Lib "MCRBoilerplate.dll" Alias "[email protected]@YGXXZ"() 

ve burada C beyan ++

__declspec(dllexport) void __stdcall initMCR() { ... } 

Neden ben olduğunu DLL çağrıları çalışıyor olsa bile, bu Error 49 davranışını alma? void ihtiyacını dönmek VBA

+0

Tamam, geçerli bir soru olmamak için çok erken bir sürümde yanlış yorumlamış gibi görünüyor. Şimdi anladım, çözümü vererek başka bir Soru-Cevap vermek istediniz. Çözüm parçanızı soruyu cevap olarak eklemenizi tavsiye ederim. Burada yapabilirsin, geçerli ve cesaretli. –

+2

Çözümünüzü yanıt olarak görmeyi düşünün – Niall

+0

@wgrant/OT Not: Düzenlemelerinizin ara sürümlerini buraya yedeklemek için 'kaydet'e tıklamanız gerekmez (belirli bir süreden sonra düzenlerken SO taslaklarınızı yedekler)). Yakında "kaydet" i tıkladıktan sonra, eşyalarınızı yayınlıyorsunuz ve aslında bitmemiş şeylerinizle ilgili aşağılayıcı ve eleştiriler alabilirsiniz. İlk aşağı/kapalı oy için özür dilerim, genel olarak kabul edilir. Çözümünüzü önerildiği gibi bir cevap olarak belirtin ve ikisini de ikram ederim. –

cevap

0

Hızlı bir noktayı bakınız: senin Sorun, dış işlevinizde veya içe aktarılan bildirimde bir parametre uyuşmazlığı olmayabilir; VBA'da hata oluşturan bir bilinen derleyici hatası var. 49.

'Stacker pstraton's answer to 'Excel - Runtime Error 49: Bad DLL calling convention'

Sen tamamen suçsuz değilsin - muhtemelen çağıran fonksiyonunda eser (Uzun Varyantlar şey hakkında doldurma, bir Int doldurma) gereken bir iade türüne sahip bir parametre uyumsuzluğu var - ama Daha iyi kodlama ile kalıcı bir Çalışma Zamanı Hatası 49'u iptal eden birisini hiç duymamıştım. Sadece modülleri yeniden derleyin veya dışa aktarın ve yeniden gönderin. Genellikle hata mesajı tetikler deyimi misdeclared dış işleve bir çağrı değildir:

en kötüsü

bir hakiki Kırk Niner olması gerekenden daha hata ayıklamak için çok zor olmasıdır. Şanslıysanız, arayanın 'Çıkış Sub'u'; ve bazı zamanlar kötü çağrıya kadar izleyebildiğiniz yığının ötesinde bir şey; Ancak, bazen, hiç de açık değildir ve hiç belirleyici bir hata ayıklama stratejisi yoktur.