Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Callback ( DLL C++) (EXE C#) 
:(
    Опции темы
V0LT
Дата 24.8.2009, 02:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.6.2009

Репутация: 1
Всего: 2



Незнаю что и делать ... вобщем написал я сия код ... вызвал процедуру из C# и понял что процент срабатывания этого кода равен около 20% в остальных случаях получаю корокозябры ... я так понимаю дело в DLL а точнее в потоке в который передаются параметры

Код
typedef bool (CALLBACK CallbackFunc)(char *);

struct thParam
{
    CallbackFunc *cbProc;
    char *server;
};

DWORD WINAPI Thread( void *arg )
{
    thParam pPar = *(thParam *)arg;
    for (int i=0;i<100;i++) 
    {
        (pPar.cbProc)(pPar.server);
        Sleep(1000);
    }
    return 0;
}

extern "C" void __declspec(dllexport) CalcResults(CallbackFunc *Callback, char *server)
{
    static thParam par;
    par.cbProc = Callback;
    par.server = server;
    CreateThread(NULL, 0, Thread, (void *)&par, 0, NULL);
}


Это сообщение отредактировал(а) V0LT - 24.8.2009, 02:52
PM MAIL ICQ   Вверх
andrew_121
Дата 24.8.2009, 03:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Опиши подробно что происходит. И покажи как вызываешь.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
V0LT
Дата 24.8.2009, 04:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.6.2009

Репутация: 1
Всего: 2



Код
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace Project
{
    public partial class Form1 : Form
    {
        public delegate void AddToLog(String str);
        public AddToLog myDelegate;
        public void AddToLogMethod(String str)
        {
            richTextBox1.Text += str;
        }

        public delegate void CallbackHandler([MarshalAs(UnmanagedType.LPStr)] String text);

        [DllImport("DLL.dll", CharSet=CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        extern static void CalcResults(CallbackHandler cbFunc, String text);

        void Callback([MarshalAs(UnmanagedType.LPStr)] String text)
        {
            myDelegate = new AddToLog(AddToLogMethod);
            Invoke(myDelegate, new object[] { text });
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            CalcResults(Callback,"227.0.0.1:7777");
        }
    }
}


Повторяю ... вызываю CalcResults(Callback,"227.0.0.1:7777"); вместо ответа 227.0.0.1:7777 получаю или иероглифы или прочую муть ... 
если из кода удалял [MarshalAs(UnmanagedType.LPStr)] и CallingConvention = CallingConvention.Cdecl
то приходил только первый символ тоесть 2

Это сообщение отредактировал(а) V0LT - 24.8.2009, 04:12
PM MAIL ICQ   Вверх
andrew_121
Дата 24.8.2009, 04:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(V0LT @  24.8.2009,  04:09 Найти цитируемый пост)
CallingConvention.Cdecl

Здесь подразумевается __cdecl

А тут другое:
Цитата(V0LT @  24.8.2009,  02:52 Найти цитируемый пост)
extern "C" void __declspec(dllexport) CalcResults(CallbackFunc *Callback, char *server)


Попробуй так:
Код

extern void __cdecl CalcResults(CallbackFunc *Callback, char *server)


Какие еще варианты есть у CallingConvention ?

Это сообщение отредактировал(а) andrew_121 - 24.8.2009, 04:41


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
andrew_121
Дата 24.8.2009, 04:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Кстати, приведенный тобой код длл-ки, весь? Почему тогда она С++ ?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
V0LT
Дата 24.8.2009, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.6.2009

Репутация: 1
Всего: 2



скажем так ... это лиш наглядный пример .. функций там гораздо больше 
PM MAIL ICQ   Вверх
V0LT
Дата 24.8.2009, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.6.2009

Репутация: 1
Всего: 2



Проблему не удалось решить ... вызвало ошибку ... люди добрые помогите ...
Нужно как я понял передавать в поток параметры ... а они теряются ... если передаю не структуру ... то передаётся отлично
PM MAIL ICQ   Вверх
Любитель
Дата 24.8.2009, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Вопрос №1 - если вызывать твою длл-ку из-под С++, то всё работает? Можно даже временно скоипастить всё в один проект и разобраться. А уж насчёт маршалинга - это уже другой вопрос (и.. вообще говоря, в другой раздел smile ).


--------------------
PM MAIL ICQ Skype   Вверх
V0LT
Дата 24.8.2009, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.6.2009

Репутация: 1
Всего: 2



Цитата

Вопрос №1 - если вызывать твою длл-ку из-под С++, то всё работает?

не проверял

Проблема 100% в DLL написаной на C++ а именно передачи данных в поток 

Это сообщение отредактировал(а) V0LT - 24.8.2009, 16:31
PM MAIL ICQ   Вверх
V0LT
Дата 25.8.2009, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.6.2009

Репутация: 1
Всего: 2



А вот что я получаю при нажатии кнопки в приложении посылающему в поток данные 
Код

Test goVÀîÀîÀîÀîÀîÀîÀî227.0.0.1:7777Àî227.0.0.1:77779~0ˆ6~ÿÿÿÿ*ˆ6~ 7~øIIIII9~0ˆ6~ÿÿ

PM MAIL ICQ   Вверх
Lazin
Дата 25.8.2009, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



запусти под отладчиком, посмотри что получает поток
PM MAIL Skype GTalk   Вверх
DrHex
Дата 28.8.2009, 10:24 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 2.5.2009

Репутация: нет
Всего: нет



string C# имеет какую кодировку?? сколько байт весит один символ????

В прочем так лучше не делать.... Есть какой о ком интерфейс вот его и дергай. Про Линукс в данном случае лучше вообще не говорить. Дело в том что обращается с нативного кода к байт коду не очень хорошая идей, но если надо то надо
--------------------
google.com и это все.
PM MAIL   Вверх
Lazin
Дата 28.8.2009, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



DrHex, что за бред ты несешь?
PM MAIL Skype GTalk   Вверх
V0LT
Дата 30.8.2009, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.6.2009

Репутация: 1
Всего: 2



DrHex, аццкий бред несёш, сотона  smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0896 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.