C# com dll delegate...
 
Bildirimler
Hepsini Temizle

C# com dll delegate " Nesne hedef türüyle eşleşmiyor " hatası  

  RSS
Erkan İNANÇ
(@ErkaniNANC)
Üye

Merhaba arkadaşlar delphi için oluşturduğum bir c# dll var.Bu dll , delphi uygulama kendi pc imde çalışınca herhangi bir sorun çıkarmıyor.Ancak farklı bir pc ye geçince(windows 7 - 8 ) uygulama exe durdurma hatasına düşüyordu.Hatayı try catch ile yakaladım ve hata

 " Nesne hedef türüyle eşleşmiyor "

Hata ,dll deki delegate ten oluşturduğum event ta vermektedir..Kod aşağıdadır.Şu nu göz önünde bulundurun kendi pc imde (derlerken veya exe den çalıştırma) çalışıyor herhangi bir hata vermiyor ancak farklı pc de bu hatayı veriyor..


 [ComVisible(false)]

    public delegate void DocumentEvent(object o,DocumentArgs e);

   
    [Guid("CD71C405-E23A-42F6-B1CF-E15C1F415C5A")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    [ComVisible(true)]

    public interface IOperations
    {
         
        void DocumentReceived(object o, DocumentArgs e);
    }

   
    [Guid("8C6DAD17-0612-4166-AD35-3A55DDEAF62E")]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ComVisible(true)]
    [ComSourceInterfaces(typeof(IOperations))]

    public class Operations:MarshalByRefObject
    {
        #region Methods

        /// <summary>
        /// OnDocumentReceived
        /// </summary>
        public event DocumentEvent DocumentReceived;
  
     public void ExecDocumentReceived(object o, DocumentArgs e)
        {
           
            if (DocumentReceived != null)
            {        

                 try{      

                DocumentReceived(o,e);
               

                 }catch(exception ex)

                 {   throw new Exception(ex.Message); }                    

            }
        }

 Kodu anlatayım Com dll bir tane döküman taradıktan sonra image pathlerini DocumentArgs objesine atmakta ve yukarıdaki ExecDocumentReceived fonksiyonunu çağırmakta.Burada ise en yukarıda oluşturulan delegate ten türeyen eventa (DocumentReceived(o,e)) atamaktadır. Bu kod satırına gelince  " Nesne hedef türüyle eşleşmiyor " hatası vermekte.

Yine söylüyorum hata diğer pclerde çıkıyor.

Yardımlarınızı bekliyorum 

Alıntı
Gönderildi : 30/01/2015 12:38
Yavuz Cingöz
(@YavuzCingoz)
Üye

Sanırım referanslarından biri eksik veya .Net Framework versiyonunda problem var. dll'in başvurduğu alt referansları kontrol etmelisin. Ayrıca bazı dll başvurularında, projeni derlerken .Net Client Profil kullanıyor olman sorun yaratabilir.

CevapAlıntı
Gönderildi : 30/01/2015 13:47
Erkan İNANÇ
(@ErkaniNANC)
Üye

Yavuz Bey

Benim geliştirme yaparken kullandığım .Net Framework 3.5 ve .Net Client Profile değil.Böylede denedim ancak yine de olmadı.

Net Framework 4.0 yaptım denedim yine olmadı.

 

CevapAlıntı
Gönderildi : 30/01/2015 15:42
Erkan İNANÇ
(@ErkaniNANC)
Üye
Arkadaşlar hata tam olarak şu
System.Reflection.TargetException: Object does not match target type.
   at System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters)
   at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
   at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
   at ICSCanonSDK.IOperations.DocumentReceived(Object o, DocumentArgs e)
   at ICSCanonSDK.Operations.ExecDocumentReceived(Object o, DocumentArgs e) in c:\Users\PC\Documents\Visual Studio 2012\Projects\SDK\Operations.cs:line 156
CevapAlıntı
Gönderildi : 02/02/2015 11:15
Erkan İNANÇ
(@ErkaniNANC)
Üye
Arkadaşlar sorunu çözdüm
Dll li register ettiğim gibi oluşan Tlb dosyasınıda register etmem gerekiyormuş
Yardımcı olmaya çalışan arkadaşlara teşekkürler
CevapAlıntı
Gönderildi : 02/02/2015 19:11
Paylaş: