folder Tahribat.com Forumları
linefolder C - C++
linefolder İki Boyutlu Dizi Döndürme



İki Boyutlu Dizi Döndürme

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ozgunlu
    ozgunlu's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Kasım/2011
    Erkek

    Hocalar, C++ Cli diye geçiyor sanırım, buradaki fonksiyonlardan dll oluşturup sonra tlb dosyasına çevirip delphi' de kullanıyorum. Fakat parametre tipleri array olanları delphi de TSafeArray diye birşeye çeviriyor. Bazı fonksiyonlarda aldığı parametreleri pointer ile dolduruyor. Burda cli::array ^_is_complete bunda yaptığı gibi. Ama delphi' den gönderdiğim TSafeArray' i sanırım memory' de kopyalıyor. Bu yüzden de benim yolladığım içerik değişmeden geri geliyor.

    Buna çözüm olarak dll içindeki fonksiyonlara geri dönüş tipi ekleyerek, yolladığım dizileri geri döndürüyordum.

    Fakat bu verdiğim fonksiyonda geri dönüş tipi zaten var Int32 olarak. Ben buna ek olarak cli::array ^_is_complete bunu da döndürmek istiyorum. Bu yüzden de çift boyutlu dizi yapiyim dedim. 

    Fakat bunu nasıl döndürebilirim bulamadım. Yardımcı olabilecek var mıdır acaba?

     

    Int32 Ckdu_cache::get_databin_length(Int32 _databin_class, Int64 _codestream_id, Int64 _databin_id, cli::array ^_is_complete)
    {
    int databin_class = (int) _databin_class;
    kdu_long codestream_id = (kdu_long) _codestream_id;
    kdu_long databin_id = (kdu_long) _databin_id;
    bool *is_complete = NULL;
    if (_is_complete != nullptr)
    {
    int _len_ = _is_complete->Length;
    is_complete = new bool[_len_];
    for (int _n_=0; _n_ < _len_; _n_++)
    is_complete[_n_] = (bool) _is_complete[_n_];
    }
    int Result;
    try { // So we can clean up temporary arrays
    Result = _get_kref()->get_databin_length(databin_class,codestream_id,databin_id,is_complete);
    } catch (...) {
    if (is_complete != NULL)
    delete[] is_complete;
    throw;
    }
    if (_is_complete != nullptr)
    {
    int _len_ = _is_complete->Length;
    for (int _n_=0; _n_ < _len_; _n_++)
    _is_complete[_n_] = (Boolean) is_complete[_n_];
    }
    Int32 _Result = Result;
    if (is_complete != NULL)
    delete[] is_complete;
    
    return _Result;
    }
    Int32 Ckdu_cache::get_databin_length(Int32 _databin_class, Int64 _codestream_id, Int64 _databin_id)
    {
    cli::array ^_is_complete = nullptr;
    return get_databin_length(_databin_class,_codestream_id,_databin_id,_is_complete);
    }


    virtual Int32 get_databin_length(Int32 databin_class, Int64 codestream_id, Int64 databin_id, cli::array<Boolean> ^is_complete);
    Int32 get_databin_length(Int32 databin_class, Int64 codestream_id, Int64 databin_id);

    Hello, i am nothing. I come from Neverland.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ozgunlu
    ozgunlu's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Kasım/2011
    Erkek

    Düzelttim de şunun geri dönüş tipi ne olacak?

    int* Ckdu_cache::get_databin_length(Int32 _databin_class, Int64 _codestream_id, Int64 _databin_id, cli::array<Boolean> ^_is_complete)
      {
        int databin_class = (int) _databin_class;
        kdu_long codestream_id = (kdu_long) _codestream_id;
        kdu_long databin_id = (kdu_long) _databin_id;
        bool *is_complete = NULL;
        if (_is_complete != nullptr)
          {
            int _len_ = _is_complete->Length;
            is_complete = new bool[_len_];
            for (int _n_=0; _n_ < _len_; _n_++)
              is_complete[_n_] = (bool) _is_complete[_n_];
          }
        int Result;
        try { // So we can clean up temporary arrays
        Result = _get_kref()->get_databin_length(databin_class,codestream_id,databin_id,is_complete);
        } catch (...) {
        if (is_complete != NULL)
          delete[] is_complete;
        throw;
        }
        if (_is_complete != nullptr)
          {
            int _len_ = _is_complete->Length;
            for (int _n_=0; _n_ < _len_; _n_++)
              _is_complete[_n_] = (Boolean) is_complete[_n_];
          }
        Int32 _Result = Result;
        if (is_complete != NULL)
          delete[] is_complete;
    
    	cli::array<int, 2> ^res = gcnew cli::array<int, 2>(2, 1);
    
    	res[0,0] = _is_complete[0];
    	res[1,0] = _Result;
    
        return res;
      }

    Hello, i am nothing. I come from Neverland.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    array<int, 2> bu şekil olmuyor mu?

     

    https://msdn.microsoft.com/en-us/library/dtbydz1t.aspx

     

    The next sample shows how to perform aggregate initialization on single-dimension managed arrays.

     

    bu yazının altındaki örneğe ve output a bak,..

    unbalanced tarafından 08/May/15 13:46 tarihinde düzenlenmiştir

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ozgunlu
    ozgunlu's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Kasım/2011
    Erkek
    unbalanced bunu yazdı

    array<int, 2> bu şekil olmuyor mu?

     

    https://msdn.microsoft.com/en-us/library/dtbydz1t.aspx

     

    The next sample shows how to perform aggregate initialization on single-dimension managed arrays.

     

    bu yazının altındaki örneğe ve output a bak,..

    öyle denedim de, array<int, 2>^ -> şu işareti eklemek lazımmış, sağol hocam


    Hello, i am nothing. I come from Neverland.
Toplam Hit: 2014 Toplam Mesaj: 4