2010-04-24 18 views
5

İyi günler, ben ağ farkında olan bir uygulama iletişim kurmak için CORBA kullanabileceği bir dll üzerinde çalışıyor olmasıPInvoke Not yığınına

Dengesizliklerinin. C++ konsol uygulaması olarak çalıştırırsam kod çalışır. Ancak, yöntemleri dll olarak dışa aktarma konusunda takıldım. Yöntemler iyi bir şekilde dışa aktarılıyor gibi görünüyor ve eğer parametreleri olmayan bir yöntem çağırıyorsa, beklendiği gibi çalışıyor. C# dizesini bir C++ yöntemine geçirme konusunda takılıyorum.

Benim C++ yöntemi üst bilgisi aşağıdaki gibidir:

aşağıdaki
bool __declspec(dllexport) SpiceStart(char* installPath) 

Benim C# DLL alma kodu olarak:

bool success = SpiceStart(@"c:\sedatools"); 

:

[DllImportAttribute("SchemSipc.dll", CharSet=CharSet.Ansi)] 
private static extern bool SpiceStart(string installPath); 

Ben yöntem şöyle diyoruz SpiceStart çağrısı, "PInvokeStackImbalance" istisnasını atar; yönetilmeyen hedef imzasıyla eşleş. "

Herhangi bir öneriniz var mı? Char * ve stringleri parametrelerden kaldırırsam, yöntem iyi çalışır. Ancak, uygulamanın kurulum yolunu C# 'dan dll'ye aktarmak istiyorum. peşin

sayesinde

Giawa

cevap

10

çağıran konvansiyonlar uyuşmuyor.

Harici "C" BOOL __declspec (dllexport) __stdcall SpiceStart (char * INSTALLPATH)

+3

+1: C++, stdcall çağrı kuralı ile işlev bildirmek. Veya DllImportAttribute'de çağrı kuralını belirtin. –

+0

Mükemmel - Bu, işi yaptı! Teşekkürler – Giawa