Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

Открыть новую тему     Написать ответ в эту тему

Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вопросы по программированию на C/С++

 
  • Справочники, книги
  • Выбор IDE (среды программирования)
     
    Постарайтесь дать как можно больше информации о возникшей проблеме - это в конце концов в ваших же интересах чтобы вам помогли.

    Решения конкретных задач собираются и обсуждаются в теме Задачи по C/С++ .

    Прежде чем просить помощи в задании...
    Если позарез надо и вы даже готовы заплатить

    Как правильно задавать вопросы, если вы хотите получить ответ.

    Полезные ссылки:
    C++(eng)

  • Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 13:37 06-05-2004 | Исправлено: AZJIO, 19:45 12-05-2014
    Mr Nobody



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Antananarivu, что у вас за вычисления, что 14 значащих цифр вам мало? Как я понимаю, вы не математик - вычислитель и не можете делать что либо грандиозное в этой области. Может вам и 32 бит хватит?
     

    Цитата:
    3) для очень точных расчетов обычно используют специализированные библиотеки

    И язык Фортран. Это его область!

    Всего записей: 350 | Зарегистр. 19-09-2007 | Отправлено: 20:27 15-10-2007 | Исправлено: Mr Nobody, 20:29 15-10-2007
    Antananarivu

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mr Nobody
    Ха... А вот сейчас будет страшно. Я, конечно, слабый математик, к сожалению, но математик. И сейчас в ЦУПе идет переделывание (хотя слово идет - довольно оптимистичное, точнее я пытаюсь что-то сделать) огромного комплекса по прогнозированию движения КА и КО с Фортрана-77 на С++ (новое поколение не хочет вязаться с Фотраном, хотя я согласен, что он создан специально для вычислений в общем-то). Так что в Ваших интересах мне помогать по мере сил, а то скоро падать все начнет...

    Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 21:17 15-10-2007 | Исправлено: Antananarivu, 21:22 15-10-2007
    Mr Nobody



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Antananarivu
    Как я понял ЦУП - это Центр Управления Полетами?  А что такое КА и КО?
    Как мне показывал мой опыт программирования на С++ классы безполезны при численном прграммировании. То есть С++ сведется к С. Что это даст, да ничего, кроме дополнительных, трудно уловимых ошибок.  
    Мой вам совет, идите на соседнию ветку Фортрана, я уверен, там есть кто встречался с портированием Фортрана на С и С++. Может я и ошибаюсь, это будет хорошо.

    Всего записей: 350 | Зарегистр. 19-09-2007 | Отправлено: 21:47 15-10-2007
    Antananarivu

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mr Nobody
    КА - космический аппарат. КО - космический объект. КА - рукотворные аппараты, КО - любой космический объект.
    Да поздно уже. Во первых, я сам довольно плохо знаю Фортран. Во-вторых, я не начальник и мне дали такое задание. Третье, огромная часть комплекса уже написана ( не знаю, классы прекрасно работают - пока точности хватало, посмотрим что будет дальше - например интегратор описан как класс) и я его дорабатываю - сейчас в частности занимаюсь кодированием краевой задачи методом наименьших квадратов.

    Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 21:57 15-10-2007
    Mr Nobody



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Antananarivu

    Цитата:
    Во первых, я сам довольно плохо знаю Фортран

    Для изучения Фортрана 77 человеку, который разобрался  в Пискунове, достаточно тоько два месяца. Причем с нуля. С++, как мне кажется, занял у меня больше двух лет, и то я не уверен, быстрей всего больше.

    Цитата:
    не знаю, классы прекрасно работают - пока точности хватало, посмотрим что будет дальше - например интегратор описан как класс

    Вы меня извините, то вы знаете, что такое в С++ класс. Если можно, то я бы хотел посмотреть на класс, который осуществляет численное интегрировние?
    Что мне еще не понятно, так если работает, то зачем трогать?  
     
     

    Всего записей: 350 | Зарегистр. 19-09-2007 | Отправлено: 22:55 15-10-2007
    Antananarivu

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mr Nobody
    Я всего не знаю. Насколько я знаю, все это дело берет информанцию из базы данных Oracle. Работа с Ораклом организована методоми Java. Также весь интерфейс Java. А уже из Java вызываются С++ методы. Насколько я знаю Java и C++ очень хорошо друг с другом взаимодействуют. Я не знаю возможно ли это сделать средствами Fortrana (взаимодействие с Java - развитый интерфейс, возможно?), а если даже да, то видимо программист, реализующий это дело либо об этом не знал, либо имел какие-то свои причины для перевода все на С++, о которых я и не догадываюсь.  
    Возможно использование именно Java и С++ - обязательство перед заказчками по ТЗ, кем-то когда-то подписанному.  
    Класс интегратор. Ну даже я, в общем-то пока ламер С++, вижу что все это сделано не блестяще - никакого ООП в сущности не наблюдается, так процедурное программирование.  
    Вы вообще должны понимать, что средний возраст работников моего отдела 60 лет, многие остановились на Алголе, многие ушли, а я занимаюсь С++ около 3 месяцев и то - постольку-поскольку. Что имею - то и имею.    
    P.S.
    Бонус:

    Код:
    class CIntegrator //public Satellite    
    {
    public: //methods
     
        CIntegrator(long jt0,LDouble tj0,T3DVector* rv,Perturbation_set* right,short power=13,LDouble eps =1.E-15);
        virtual ~CIntegrator();
        virtual void GetVector(LDouble tj,T3DVector* rv);
        virtual void GetMatrix(NMTMatrix &matrix);
    protected:// methods
        virtual void Fsp(T3DVector* f, LDouble *B, T3DVector* sum);
        T3DVector Sum(T3DVector* fun,LDouble h_tau);
        void  SumRV(LDouble h_tau, T3DVector *f1, T3DVector *f2);
    public:// members
        long        m_countStep;//step' counter
        long        m_countForce;//forc' counter
    protected:// members
        long m_p_JT0;
        LDouble m_p_T0;
        T3DVector* m_p_RV0;
        short m_nPower;
        LDouble        m_Tau[15];
        LDouble        m_cTau[15];
        LDouble        m_B1[225];//[15*15] 1st order integrator matrix
        LDouble        m_B2[225];//[15*15]2nd order integrator matrix
        LDouble        m_eps;    // Integerator error
        LDouble        m_h;    // Current step
        LDouble        m_tCur;//Current time
        LDouble        m_hCorrector;//corrector's step
    //    LDouble        m_h_min;// min step
    //    LDouble        m_h_max;//max step
        short        m_nMiddle;// center of sequence
        short        m_direction;// direction of integration +1 time forward -1 time backward
        short        m_nBegin;//depend from direction
        short        m_nFinish;//depend from direction
        short        m_nNextStep;// depend from direction
        T3DVector    m_rvOld[15][2];//velocities in history of integration
        T3DVector    m_fOld[15];//accelerations in history of integration
        T3DVector    m_rvStep[15][2];//current step series velocities  
        T3DVector    m_fStep[15];//current step series accelerations
        short        m_nCalc[15];//check every point by eps
        short        m_bInitFlag;//first step flag
        short        m_Flag;
        Perturbation_set* m_pRight;
        LDouble m_PM[15];
    };

    Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 23:31 15-10-2007 | Исправлено: Antananarivu, 23:44 15-10-2007
    Mr Nobody



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Antananarivu, это какой то класс, совмещенный с MFC. У поклонников этой библотеке всегда появляется привычка писат с "бородавкой" m_, сам прошел через это.
    Мой совет, обратитесь на ветку Фортрана, вам больше помогут, чем на этой ветке.
    Это моё мнение.

    Всего записей: 350 | Зарегистр. 19-09-2007 | Отправлено: 09:33 16-10-2007
    WiseAlex



    Софтовых дел М...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Antananarivu
    действительно для меня загадочен переход на с++. Есть ощущение, что просто модно. Отсутствие специалистов так же не аргумент - фортран не слишком сложен.
    Думаю, что совместить java и fortran вполне возможно. Да и с++ и фортран не сложно.
    на с++ тяжело делать оптимизацию вычислений - бесконечная борьба с ненужными временными объектами (для собственных численных классов)...
    Для фортрана есть хорошо оптимизированные библиотеки (во всяком случае для x86 платформы-  от интел например)
    Кстати вы пишите только под x86 или еще для чего-то? Если еще под что-то, то тогда с++ может быть предпочтительнее
    Mr Nobody

    Цитата:
    m_

    модные тенденции - подчеркивание в конце или начале, с другой стороны когда набираешь m_ всегда подсказка точная, поэтому я до сих пор использую m_ и в не mfc проектах.

    Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 11:36 16-10-2007
    Antananarivu

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Да, P4 везде стоят. На сервере (где база данных) Unix, на клиентских - XP. Не знаю я, видимо погнались за модой, красотой и интерфейсом. А совмещать джаву с фортраном, думаю, банально никто и не умеет. Я сегодня спрошу - отпишусь, что мне ответят.

    Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 11:52 16-10-2007 | Исправлено: Antananarivu, 11:53 16-10-2007
    Sacramento



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Пожалуйста, помогите чайнику
     
    Пытаюсь написать DLL на C++ естественно, а затем вызвать экспортируемую функцию скажем на C#(последнее роли не играет, но тестирую именно на нем)
     
    Нужно сделать так, чтобы возврат значений происходит через параметры функции. Например: (естественно я объявил эту функцию как экспортируемую в DEF-файле)
     
    --------С++-------
    DWORD GetDrive(BYTE ucIndex, TEST sDrive)
    {
    ucIndex=44; //присваивание переменной ucIndex значения
                       //никак не отображается в вызываемой функции
    sDrive.Info=3//как собственно и попытка изменить параметры структуры
    ...
    return(22); //обычный возврат проходит успешно
    }
    ---------------------
     
    пытаюсь вызывать эту функцию вот так
    ---------С#--------
    [DllImport("DriveRead.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    static extern int GetDrive(ref byte ucIndex, ref TEST sDrive);
     
    void Test()
    {
    TEST di= new TEST(); //Создаю структуру TEST
    int gg = 0;
    byte dd = 0;
    gg = GetDriveInfo(ref dd, ref di); //Вызываю функцию
    //Результат
    //gg=22 - все в порядке
    //dd=0 -
    //di - также не изменился
    }
     
    В C# возврат значений через параметры функции плювое дело, а как это сделать в C++? Причем для экспортируемых функций.
    Перебрал около 20 книжек по C++, но решения не нашел (поисковики, что-то молчат, а может я искать не умею)

    Всего записей: 62 | Зарегистр. 07-05-2007 | Отправлено: 12:25 16-10-2007
    Mr Nobody



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sacramento, как мне кажется на первый взглят, ты пишеш DLL не на C++, а на С. Когда ты пишеш на С++ линкер добавляет всякие "украения" к имени функции. Если вы напишете extern C, то имя функции останется неизменным. Как я помню, что DLL на C++ идут в рамках одного компилятора.  

    Всего записей: 350 | Зарегистр. 19-09-2007 | Отправлено: 12:35 16-10-2007
    Rudia



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sacramento
    Вообще то в качестве параметров функций, реализованных в DLL не рекомендуется использовать пользовательские типы данных. Так как каждый язык, даже различные компиляторы используют свою модель памяти. А параметры, типа класс передаются по ссылке. То есть функция в библиотеке получает ссылку на область памяти где расположен класс, но из-за другого менеджера памяти она может считать вообще левую информацию. Так что пример, описанный выше возможно заработает, только если программа и библиотека будут написаны на одном языке и собраны одним компилятором. Так что используйте в качестве параметров простые порядковые типа данных, массивы символов и будет вам счастье).

    Всего записей: 324 | Зарегистр. 13-09-2006 | Отправлено: 12:37 16-10-2007
    distance

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Rudia

    Цитата:
    Так что используйте в качестве параметров простые порядковые типа данных, массивы символов и будет вам счастье).

    Ничего подобного. Касаемо C#, он позволяет свободно обмениваться пользовательскими типами данных, равно как и интерфейсами, областями памяти etc
     
    Sacramento
    на первый взгляд, у тебя неправильно передаются параметры - по ЗНАЧЕНИЮ, а стало быть, в функции изменяются всего лишь копии.
     
    DWORD GetDrive(BYTE* ucIndex, TEST* sDrive) - начни отсюда.

    Всего записей: 878 | Зарегистр. 28-03-2004 | Отправлено: 13:09 16-10-2007
    Sacramento



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    как мне кажется на первый взглят, ты пишеш DLL не на C++, а на С. Когда ты пишеш на С++ линкер добавляет всякие "украения" к имени функции. Если вы напишете extern C, то имя функции останется неизменным. Как я помню, что DLL на C++ идут в рамках одного компилятора.

    Нет, я пишу на Visual C++ 2005. Насчет украения, тут все в порядке, имена функций остаются такими, какими я их назвал, так как я их принудительно задаю в DEF файле. Да и вызывается эта функция без проблем, просто не хочет возвращать значения через параметры.

    Цитата:
    Вообще то в качестве параметров функций, реализованных в DLL не рекомендуется использовать пользовательские типы данных. Так как каждый язык, даже различные компиляторы используют свою модель памяти. А параметры, типа класс передаются по ссылке. То есть функция в библиотеке получает ссылку на область памяти где расположен класс, но из-за другого менеджера памяти она может считать вообще левую информацию.

    Согласен, но дело даже не в типах данных. Я использовал BYTE и структуру только для примера. Дело в том, что у меня не получается возврат через параметры ни с одним типом данных, буть то байт или integer. API-е функции от майкрософта (в DLL типа kernel32, gdi и пр.) Проделывают такие вещи без проблем с любым типом данных, только вот как?
     
    Я предполагал, что надо использовать в параметрах конструкции типа "[out] int var", но что-то все равно не получается.  
     
     
     
    Добавлено:

    Цитата:
    DWORD GetDrive(BYTE* ucIndex, TEST* sDrive) - начни отсюда.

    Попробовал
    ----
    DWORD GetDrive(BYTE *ucIndex, TEST *sDrive)  
    {  
    *ucIndex=44;                    
    sDrive->Info=3;  
    ...  
    return(22);  
    }
     
     и получил (в настройках проекта C# я пометил, что код unsafe)
    ----
    The runtime has encountered a fatal error. The address of the error was at 0x79f1c184, on thread 0x7ec. The error code is 0xc0000005. This error may be a bug in the CLR or in the unsafe or non-verifiable portions of user code. Common sources of this bug include user marshaling errors for COM-interop or PInvoke, which may corrupt the stack.
    ----
     
    хотя, без указателей и функция вызывалась и число 22 возвращалось
     
    Если можно, напишите рабочий пример.

    Всего записей: 62 | Зарегистр. 07-05-2007 | Отправлено: 13:12 16-10-2007
    Rudia



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Ничего подобного. Касаемо C#, он позволяет свободно обмениваться пользовательскими типами данных, равно как и интерфейсами, областями памяти etc  

    dll вообще то чаще всего используются когда надо предоставить некоторые функции, которые должны работать и при вызове из другого языка программирования, использование в качестве параметров классов сводит это преимущество на нет. У меня на работе система есть, написанная на 4 дельфи, она использует dll-ки в качестве расширений, так вот из-за того, что туда передаются классы, система будет некорректно работать с ними, если их скомпилировать даже в более поздней версии делфи, не говоря уже о других языках. Приходится сидеть на 4

    Всего записей: 324 | Зарегистр. 13-09-2006 | Отправлено: 13:26 16-10-2007
    Antananarivu

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    WiseAlex Mr Nobody
    Причины, по которым Фортрановский комплекс стал в середине 80-ых - начале 90-ых переводится на рельсы С С++ и Java.
    1). Неудобство реализации самого комплекса. Многие вещи были в свое время запрограммированы не лучшим образом. В итоге для добавления или изъятия, скажем, одной из возмущающих сил приходилось лезть в процедуру и менять десятки строк, что тянуло за собой как снежный ком другие процедуры.
    2). Комплекс на С++ упрощенная и сильно переработанная фортрановская версия.
    3). В середине 80 -начале 90 - был большой упадок сил, скажем так. Фортран был в некотором запустении, как мне сказали, не было ни графических каких-то возможностей, не было такой хорошей согласованности с С и Java.
    4). Java гораздо более машинно и системно независимый язык, чем тот же Fortran 77, у нас есть и Unixовые машины и Windowсовые. Fotran по крайней мере 77, по разному реагировал на такие вещи, что было неудобно - приходилось его дорабатывать.
    5). Неопытному программисту и оператору работать с классами С++ значительно удобнее, если надо что-то поменять быстро в программе особо не вникая в ее суть (суть интегратора, алгоритма и т.д.) Вникать и переделывать процедуры Fortran где зачастую, чтобы что- то изменить, нужно поменять сотни строк в десятке файлов, гораздо сложнее, чем в С++.
    6). "Ты не думай - это не прихоть какая-то и не блажь."
    Вот такие причины мне озвучили. Согласитесь Вы с ними или признаете их необоснованность - не знаю. Но для меня обратной дороги уже нет.

    Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 13:44 16-10-2007 | Исправлено: Antananarivu, 13:50 16-10-2007
    Sacramento



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    DWORD GetDrive(BYTE* ucIndex, TEST* sDrive) - начни отсюда.

    После недолгих испытаний, выяснилось что передача параметров используя указатели работает без проблем только для byte, int и пр. стандартных типах данных (хоть что-то!!!), а ошибка о которой я писал выше вылазит если я пытаюсь использовать структуру.  
    Т.е.
    это работает - DWORD GetDriveInfo(BYTE *ucDriveIndex)
     
    А вот это - DWORD GetDriveInfo(BYTE *ucDriveIndex, TEST *sDriveInfos)
    нет. Если быть точным, то ошибка вылазит тогда, когда я пытаюсь изменить значение одного из параметров структуры (которая была создана в C# и передана через указатель)
     
    Может я ее не правильно объявляю:
     
    В С++ я пишу так:
    ---
    typedef struct
    {    
        int Info;
        int Other;    
    }TEST;
    ---
     
    И вот так в C#
    ---
    public struct TEST
    {
         public int Info;
         public int Other;
    }  
     
    В чем подвох? То, что со стандартными типами получается это гуд, но я планирую по большей части использовать структуры, так как массивы быйтов слишком сложно да и не юзабельно.

    Всего записей: 62 | Зарегистр. 07-05-2007 | Отправлено: 13:50 16-10-2007
    distance

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sacramento
    что-то у тебя значит неправильно...
    повторил твой тест:
     
    код на C++ (чуть подправлен результат генерации визарда)
    Код:
    // в *.h
     
    struct TEST
    {
        int Info;
    };
     
    typedef TEST* LPTEST;
     
    extern "C" CS_DLL_API int GetDrive(LPBYTE lpIndex, LPTEST lpDrive);
     
    // в *.cpp
    CS_DLL_API int GetDrive(LPBYTE lpIndex, LPTEST lpDrive)
    {
        *lpIndex = 44;
        lpDrive->Info = 22;
        return 42;
    }

     
    код на C#
    Код:
    namespace ConsoleApplication1
    {
        internal struct TEST
        {
            public int Info;
        };
        
        class Program
        {
            [DllImport("cs_dll.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
            static extern int GetDrive(ref byte ucIndex, ref TEST sDrive);
     
            static void Main(string[] args)
            {
                TEST t = new TEST();
                byte index = 0;
                int res = GetDrive(ref index, ref t);
                Console.WriteLine("res: {0}, index: {1}, info: {2}", res, index, t.Info);
            }
        }
    }

     
    вывод:
    [xmp]res: 42, index: 44, info: 22[/xmp]
     
    Добавлено:
    VC 2005, настройки обоих проектов дефолтные

    Всего записей: 878 | Зарегистр. 28-03-2004 | Отправлено: 14:04 16-10-2007
    Rudia



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    В чем подвох?

    Подвох в менеджере памяти, как я писал выше, структура = класс.
    Объясняю грубо на пальцах, ибо самому не хочется лезть в дебри:
    пусть в С++ класс представлен в памяти как [служебная информация (n байт)][область хранения элементов (n1 байт)]
    в С# [служебная информация (m байт)][область хранения элементов (m1 байт)]
    Так вот в С++ и C# эти области могут иметь совершенно разную структуру, а вы в качестве параметров передаете просто указатель на начало этой области памяти и C++ интерпретирует её по-своему, а C# - по своему.
    Так что функции в dll на С++ скорее всего портит структуру класса С# - поэтому и фатальные ошибки лезут.

    Всего записей: 324 | Зарегистр. 13-09-2006 | Отправлено: 14:10 16-10-2007
    distance

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Rudia

    Цитата:
    Подвох в менеджере памяти, как я писал выше, структура = класс.
     
    вы в качестве параметров передаете просто указатель на начало этой области памяти и C++ интерпретирует её по-своему, а C# - по своему.

     

    Цитата:
    When platform invoke calls an unmanaged function, it performs the following sequence of actions:  
    1. Locates the DLL containing the function.
    2. Loads the DLL into memory.
    3. Locates the address of the function in memory and pushes its arguments onto the stack, marshaling data as required.  
    Note   Locating and loading the DLL, and locating the address of the function in memory occur only on the first call to the function.
    4. Transfers control to the unmanaged function.

    Всего записей: 878 | Зарегистр. 28-03-2004 | Отправлено: 14:19 16-10-2007 | Исправлено: distance, 14:20 16-10-2007
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru