Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Xu4xOK
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 6
#1

DLL не возвращает строку - C++

23.08.2013, 10:22. Просмотров 416. Ответов 4
Метки нет (Все метки)

Добрый день. Хочу создать DLL для использования в 1с. Пока получается только вернуть число, а нужно вернуть строку. Вызывается метод met4. Код:

ExampleFS.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// ExampleFS.cpp: реализация CExampleFS
 
#include "stdafx.h"
#include "ExampleFS.h"
 
 
// CExampleFS
 
 
STDMETHODIMP CExampleFS::met4(LONG* in_param, CHAR* out_param)
{
    // TODO: добавьте код реализации
    char *p;
    p = new char[20];
    strcpy(p, "Hello world!");
    *out_param = *p;
    return S_OK;
}
FS2.idl
C++
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
// FS2.idl: источник IDL для FS2
//
 
// Этот файл будет обработан средством MIDL для
// создания библиотеки типов (FS2.tlb) и кода маршалирования.
 
import "oaidl.idl";
import "ocidl.idl";
 
[
    object,
    uuid(90FE3186-0004-432E-B94B-CB0D0C508664),
    dual,
    nonextensible,
    pointer_default(unique)
]
interface IExampleFS : IDispatch{
    [id(2)] HRESULT met4([in] LONG* in_param, [out,retval] CHAR* out_param);
};
[
    uuid(BE3EC460-A48E-4056-9890-532E9BFD4C08),
    version(1.0),
]
library FS2Lib
{
    importlib("stdole2.tlb");
    [
        uuid(0129F321-5A34-4AE4-9448-056D566912A6)      
    ]
    coclass ExampleFS
    {
        [default] interface IExampleFS;
    };
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2013, 10:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос DLL не возвращает строку (C++):

Разработать и испытать функцию, которая переворачивает строку и возвращает указатель на перевёрнутую строку - C++
Разработать и испытать функцию, которая переворачивает строку и возвращает указатель на перевёрнутую строку. Прототип функции инверсии...

Функция, получающая подстроку, возвращает испорченный указатель на строку - C++
Пытаюсь выделить подстроку в Microsoft Visual C++ 2013, чтобы убрать путь к файлу и оставить только имя файла. wchar_t *...

Функция возвращает строку (или указатель на начало строки) - C++
Подскажите пожалуйста. Застрял на тривиальной задачке. Никак не могу добится чтобы функция возвращала корректно строку.(правильнее наверное...

Написать функцию, которая принимает строку звуков, а возвращает звук - C++
Всем привет! В общем, я хочу разобраться с алгоритмом в такой задаче: в каком-то языке есть только 4 звука, назовем их А, В, C, D, а...

Как сделать функцию которая получает цифру и возвращает строку? - C++
Лучше всего наглядный пример, пожалуйста. :) Благодарю всех заранее.

После вызова первого пункта меню функция не возвращает введенную строку - C++
Очень нужна помощь людей с мозгами и желательно еще пояснения. Программа после вызова первого пункта меню не принимает строку,что делать?...

4
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,018
23.08.2013, 10:30 #2
C++
1
*out_param = *p;
Здесь первый символ из p копируется по адресу из out_param. Я так понимаю, что хотелось присвоить указателю адрес, но это тоже не сработает.
А нельзя ли выделять память на стороне вызова, а здесь копировать строку прямо в out_param с помощью strcpy? Только тогда размер буфера тоже желательно передавать, чтобы защититься от его переполнения.
0
Xu4xOK
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 6
23.08.2013, 10:43  [ТС] #3
Вызывается это из 1С кодом
1C
1
2
3
Компонента = Новый COMОбъект("FS2.FS");
ТекРезультат = Компонента.met4(1);
Сообщить("" + ТекРезультат);
И нужно чтоб в 1С попадала строка
0
Убежденный
Ушел с форума
Эксперт С++
15697 / 7207 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
23.08.2013, 13:21 #4
Xu4xOK, если вы работаете с COM, то для строк должны использовать
специальный тип BSTR, а не указатель на char или wchar_t. COM-строка, в отличие
от char/wchar_t, хранит к-во символов и может передаваться через границы процессов.

Например, вот описание метода, принимающего BSTR:
Код
interface IMyIface : IDispatch
{
    HRESULT SomeMethod([in] BSTR Data);
};
А вот свойство, возвращающее BSTR:
Код
interface IMyIface : IDispatch
{
    [propget] HRESULT name([out, retval] BSTR *Data);
};
И, соответственно, его реализация:
C++
1
2
3
4
5
HRESULT _stdcall CMyIFace::get_name(BSTR *Data)
{
    *Data = SysAllocString(L"This is a name of object.");
    return S_OK;
}
0
Xu4xOK
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 6
23.08.2013, 17:48  [ТС] #5
Спасибо большое! Заработало
0
23.08.2013, 17:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2013, 17:48
Привет! Вот еще темы с ответами:

Функция, которая на вход принимает строку и в качестве результата возвращает ее копию - C++
Нужно написать функцию , которая на вход принимает строку и в качестве результата возвращает ее копию так, чтобы в ней не было гласных...

Написать функцию, которая считывает из буфера клавиатуры строку в s и возвращает длину строки - C++
*с указателями*- написать функцию которая считывает из буфера клавиатуры строку в s и возвращает длину строки. :scratch:

Функция alltrim удаляет из строки начальные и конечные пробелы и возвращает указатель на преобразованную строку - C++
Дали задание в ВУЗе. Назначение программы: Функция alltrim удаляет из строки начальные и конечные пробелы и возвращает указатель на...

Написать функцию atoi(), которая принимает параметр - строку цифр и возвращает соответствующее ей целое - C++
Это оказалось мне не по-силам, поэтому прошу помощи,господа:) Напишите функцию atoi(), которая имеет параметр - строку цифр и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru