Forum

C# com dll delegate...
 
Bildirimler
Hepsini Temizle

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

5 Yazılar
2 Üyeler
0 Reactions
1,487 Görüntüleme
(@ErkaniNANC)
Gönderiler: 123
Estimable Member
Konu başlatıcı
 

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 

 
Gönderildi : 30/01/2015 13:38

(@yavuzcingoz)
Gönderiler: 36
Eminent Member
 

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.

 
Gönderildi : 30/01/2015 14:47

(@ErkaniNANC)
Gönderiler: 123
Estimable Member
Konu başlatıcı
 

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ı.

 

 
Gönderildi : 30/01/2015 16:42

(@ErkaniNANC)
Gönderiler: 123
Estimable Member
Konu başlatıcı
 
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
 
Gönderildi : 02/02/2015 12:15

(@ErkaniNANC)
Gönderiler: 123
Estimable Member
Konu başlatıcı
 
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
 
Gönderildi : 02/02/2015 20:11

Paylaş: