На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:

  • Перед тем, как задать вопрос, желательно почитать документацию и воспользоваться поиском.
  • Когда задаёте вопрос, то обязательно указывайте платформу (7.7, 8.0, 8.1, 8.2, etc), причем желательно в заголовке. Если речь идёт о типовой конфигурации, то указывайте её название и релиз. Текущие версии можно посмотреть здесь.
  • Ещё раз напоминаем о необходимости соблюдать не только правила, но и законы. Уважайте авторские права.

Высказать своё мнение о модераторах раздела можно здесь: evGenius
  
> 1с и с++ , Помогите плизз
    Приве всем.
    У ме5ня такая задача. Один проект наклевывается но я не знаю с чего начать.
    У меня задача написать дополнение для 1с. И мне надо знать как ето вообще делается.
    Насколько я знаю, должно быть что-то в духе 1с sdk . Такаяы вещь вообще есть ?
    Может кто-то уже писал подобные вещи и знает как соединить с++ и, собственно само 1с ?

    Заранее благодарен.
      Я тут в ФАК по Срр статейку добавил - это то что тебе нужно

      Работа с 1C Предприятием из Visual C++

      Это если ты хочешь из Спп вызывать 1С. А если наоборот - то тогда используй механизм внешних компонент - этот вопрос здесь уже неоднократно рассматривался
      Сообщение отредактировано: AQL -
        2 AQL
        У меня "_variant_t" вызывает ошибку при компиляции
        Дословно
        Цитата
        : error C2065: '_variant_t' : undeclared identifier

        ,а почему?
        Вернее че делать, че заинклудить <_<
        Сообщение отредактировано: Alexxxl -
          Заинклуд comdef.h
            когда-то давно выкопал такую функцию(не помню где) обертку Invoke, но жизнь упрощает
            ExpandedWrap disabled
              HRESULT AutoWrap(int autoType, VARIANT *pvResult, IDispatch *pDisp, LPOLESTR ptName, int cArgs...) {
                  // Begin variable-argument list...
                  va_list marker;
                  va_start(marker, cArgs);
               
                  if(!pDisp) {
                      MessageBox(NULL, "NULL IDispatch passed to AutoWrap()", "Error", 0x10010);
                      return E_FAIL;
                  }
               
                  // Variables used...
                  DISPPARAMS dp = { NULL, NULL, 0, 0 };
                  DISPID dispidNamed = DISPID_PROPERTYPUT;
                  DISPID dispID;
                  HRESULT hr;
                  char buf[256];
                  char szName[256];
               
                  
                  // Convert down to ANSI
                  WideCharToMultiByte(CP_ACP, 0, ptName, -1, szName, 256, NULL, NULL);
                  
                  // Get DISPID for name passed...
                  hr = pDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID);
                  if(FAILED(hr)) {
                      sprintf(buf, "IDispatch::GetIDsOfNames(\"%s\") failed w/err 0x%08lx", szName, hr);
                      MessageBox(NULL, buf, "AutoWrap()", 0x10010);
                      return hr;
                  }
                  
                  // Allocate memory for arguments...
                  VARIANT *pArgs = new VARIANT[cArgs+1];
                  // Extract arguments...
                  for(int i=0; i<cArgs; i++) {
                      pArgs[i] = va_arg(marker, VARIANT);
                  }
                  
                  // Build DISPPARAMS
                  dp.cArgs = cArgs;
                  dp.rgvarg = pArgs;
                  
                  // Handle special-case for property-puts!
                  if(autoType & DISPATCH_PROPERTYPUT) {
                      dp.cNamedArgs = 1;
                      dp.rgdispidNamedArgs = &dispidNamed;
                  }
                  
                  // Make the call!
                  hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, autoType, &dp, pvResult, NULL, NULL);
                  if(FAILED(hr)) {
                      sprintf(buf, "IDispatch::Invoke(\"%s\"=%08lx) failed w/err 0x%08lx", szName, dispID, hr);
                      MessageBox(NULL, buf, "AutoWrap()", 0x10010);
                      return hr;
                  }
                  // End variable-argument section...
                  va_end(marker);
                  
                  delete [] pArgs;
                  return hr;
              }


            Пример использования:

            ExpandedWrap disabled
                 VARIANT v;
                 VariantInit(&v);
                 AutoWrap(DISPATCH_PROPERTYGET, &v, pv77, L"RMTrade", 0);
                 IDispatch pRMTrade=v.pdispVal;


            P.S. по хорошему, должна быть type library, чтобы через IDispatch не мучаться, а работать с vtbl
              Здесь рассматривается одна из технологий, а есть еще одна - "Загрузка внешних компонент" с помощью функции ЗагрузитьВнешнююКомпоненту() можно загрузить внешнюю dll, но вот информацию по этой теме собрать сложно.

              Такой способ не пробовали?
                Это где то тут недалеко пробегало
                Докментация
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0537 ]   [ 15 queries used ]   [ Generated: 27.04.24, 16:53 GMT ]