Şimdi Ara

Fortran dll/header ve VS 2010

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
9
Cevap
0
Favori
135
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba arkadaslar,

    Bir yazilim benim fortran subroutinelerimi kendi yazilimina baglamak icin benden bir dll dosyasi olusturmami istiyor. Bu dll dosyasini nasil olusturabilecegim ve onlarin bu dosyayi baglayabilmesi icin vermem/hazirlamam gereken diger dosyalar neler? Acikcasi genel programlama ve programlama/script dilleri (fortran/java/perl/tcl) disinda bu konuda hic bilgim yok. Visual Studio 2010 kullaniyorum. Bugün okudugum kadariyla genelde dll dosyasinin Export komutunu icermesi gerektigi ve ayrica bir de Header dosyasi olusturulmasi gerektigini anladim. Bu konuda Bilgi verebilirseniz sevinirim.



  • native dll lerde calling convention ların aynı olması gerekir bir taraf cdecl diğer taraf stdcall olursa runtime da hata alınır.dll'i yazdığın dilin önemi yoktur önemli olan
    derleyicinin nasıl kod ürettiğidir.


    ben assembly ye ilk başladığım zaman assembly de yazıp c den çağırıyordum,fortanda yazıp c den çağırabilirsin ama pek yol gösteren öğretici kaynak olduğunu zannetmiyorum çoğunlukla herşey assembly c c++ üzerine native de.
  • koccan9 kullanıcısına yanıt
    Cevap icin tesekkürler. Bu hafta icinde biraz kurcalayarak deneme yanilma yoluyla sonunda hallettim.

    DLLEXPORT ile fonksiyonu export ettikten sonra c# icinde DLLIMPORT ile cagirmak gerekiyor sanirim. Fortran kodunda cdecl yada stdcall yazmamis olmama ragmen c# programinin icinde cdecl ile cagirmak zorunda olmayi tam anlayamadim acikcasi. Ayrica REFERENCE yada VALUE olarak DEC attribute kullanmadim fortran kodunun icinde ama c# icinde DLLIMPORT sonrasinda static extern ile fonksiyonu tanitirken double olan bir parametereyi neden ref double olarak tanitmak zorunda oldugumu da tam cözemedim. Eger argüman array ise ref olarak tanitmaya gerek kalmiyor, bu fark neden olusuyor bilemiyorum. Bu konuda bir bilginiz var mi?
  • c# ta işler biraz daha farklı çünkü managed bir dilden native dll çağrılıyor,c# tarafında o konuya hakim değilim native dll çağırmak hakkında.
  • koccan9 kullanıcısına yanıt
    Managed bir dil derken neyi kastediyorsunuz? C# yerine C yada C++ olmasi yapilmasi gerekenleri cok mu degistirir?

    Ayrica fortran ile yazilan bir dll c ile cagrilmasi durumunda header dosyasina sahip olmali mi? Su ana kadar c ile yazilan bir dll dosyasinin c üzerinden cagrilmasi icin header dosyasina sahip olmasi gerektigini okudum ama c# ile fortran dll cagirirken böyle birseye ihtiyac duymadim.



    < Bu mesaj bu kişi tarafından değiştirildi RapscallioN -- 26 Ağustos 2017; 15:52:37 >
  • quote:

    Orijinalden alıntı: RapscallioN

    Managed bir dil derken neyi kastediyorsunuz? C# yerine C yada C++ olmasi yapilmasi gerekenleri cok mu degistirir?

    Ayrica fortran ile yazilan bir dll c ile cagrilmasi durumunda header dosyasina sahip olmali mi? Su ana kadar c ile yazilan bir dll dosyasinin c üzerinden cagrilmasi icin header dosyasina sahip olmasi gerektigini okudum ama c# ile fortran dll cagirirken böyle birseye ihtiyac duymadim.

    managed dil demek,bir arakod yorumlayıcısı tarafından çalıştırılan garbage collected dil demektir,managed diller arakoda dönüştürülür doğrudan makine koduna çevrilmezler.header konusunu ise bilmiyorum ama windows apinin LoadLibrary ve GetProcAdress gibi fonksiyonları var,runtime da dll yükleyip fonksiyonlarını bulan.
  • quote:

    Orijinalden alıntı: koccan9

    native dll lerde calling convention ların aynı olması gerekir bir taraf cdecl diğer taraf stdcall olursa runtime da hata alınır.dll'i yazdığın dilin önemi yoktur önemli olan
    derleyicinin nasıl kod ürettiğidir.


    ben assembly ye ilk başladığım zaman assembly de yazıp c den çağırıyordum,fortanda yazıp c den çağırabilirsin ama pek yol gösteren öğretici kaynak olduğunu zannetmiyorum çoğunlukla herşey assembly c c++ üzerine native de.

    native dll tam olarak olmamış. eğer kastedilen native derleme ise native derleme yapan ve yapmayan dillerle aynı tür dll oluşturabilirsin (visual basic ve visual c++ gibi ya da c# ve visual c++ . net gibi). bunun dışında native dll diye birşey duymadım.

    temel olarak üç tip dll var:

    -com dll: bu .dll dosyalarını regsvr32 ile register edersin ve bir nesne gibi kullanırsın. win32 uygulamalardan erişebilirsin bu dll'lere. ancak versiyonlama sorunları falan vardır. çok güvenilir değillerdir bu yüzden. visual studio altında .net dilleriyle de bu tür dll'leri birkaç parametre ayarıyla biraz takla attırdıktan sonra oluşturmak mümkündür.

    -win32 dll: bu .dll'lere de win32 uygulamalardan erişirsin, direk declare ile kullanılır. regsvr32 ile register etmeye gerek yoktur. dll içindeki her bir fonksiyon ayrı ayrı kullanılır, nesne gibi kullanamazsın.

    -net dll: .net dll ile versiyonlama sorunu falan kalmamıştır. kullanımı çok kolaydır ancak win32 uygulamaları bu tip dll'leri kullanamaz.




  • quote:

    Orijinalden alıntı: beyinsis


    quote:

    Orijinalden alıntı: koccan9

    native dll lerde calling convention ların aynı olması gerekir bir taraf cdecl diğer taraf stdcall olursa runtime da hata alınır.dll'i yazdığın dilin önemi yoktur önemli olan
    derleyicinin nasıl kod ürettiğidir.


    ben assembly ye ilk başladığım zaman assembly de yazıp c den çağırıyordum,fortanda yazıp c den çağırabilirsin ama pek yol gösteren öğretici kaynak olduğunu zannetmiyorum çoğunlukla herşey assembly c c++ üzerine native de.

    native dll tam olarak olmamış. eğer kastedilen native derleme ise native derleme yapan ve yapmayan dillerle aynı tür dll oluşturabilirsin (visual basic ve visual c++ gibi ya da c# ve visual c++ . net gibi). bunun dışında native dll diye birşey duymadım.

    temel olarak üç tip dll var:

    -com dll: bu .dll dosyalarını regsvr32 ile register edersin ve bir nesne gibi kullanırsın. win32 uygulamalardan erişebilirsin bu dll'lere. ancak versiyonlama sorunları falan vardır. çok güvenilir değillerdir bu yüzden. visual studio altında .net dilleriyle de bu tür dll'leri birkaç parametre ayarıyla biraz takla attırdıktan sonra oluşturmak mümkündür.

    -win32 dll: bu .dll'lere de win32 uygulamalardan erişirsin, direk declare ile kullanılır. regsvr32 ile register etmeye gerek yoktur. dll içindeki her bir fonksiyon ayrı ayrı kullanılır, nesne gibi kullanamazsın.

    -net dll: .net dll ile versiyonlama sorunu falan kalmamıştır. kullanımı çok kolaydır ancak win32 uygulamaları bu tip dll'leri kullanamaz.

    .net de PE dosya formatını kullanıyor kendi exe ve dllleri için oyüzden kafa karıştırıcı olabiliyor native managed diye.




  • Cevaplari/konu hakkindaki yeni yorumlari bugün farkettim. DLL dosyasini olusturdum, c# ve fortran programlarindan da cagirip calistirdim. Cevaplar icin tesekkürler.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.