:: Не фоксом единым
DLL в С++
Pavel_Yu
Автор

Сообщений: 171
Откуда: Сергие Посад
Дата регистрации: 19.11.2004
Как в С++ написать DLL, чтобы она принимала текстовый параметр и изменяла его (т.е. принимала по ссылке).

Я пишу в С++:
int __export __stdcall NewMess (char *out)
{
out='1234567890';
return sizeof(out);

А в Фоксе:

DECLARE integer NewMess IN MyDll String @
cCode= space(120)
retCode = NewMess(@cCode)
MESSAGEBOX(retCode)
Messagebox(cCode)

Первое сообщение выдает 4 (я так понял это ссылка), а второе сообщение пробелную строку(т.е. перемення не изменилась, а должна содержать '1234567890'
Ratings: 0 negative/0 positive
Re: DLL в С++
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Разве строка должна вернуться не командой return? Почему возвращается ее размер вместо строки?

А, понятно, надо по ссылке вернуть...


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.




Исправлено 1 раз(а). Последнее : Влад Колосов, 23.05.06 18:08
Ratings: 0 negative/0 positive
Re: DLL в С++
Pavel_Yu
Автор

Сообщений: 171
Откуда: Сергие Посад
Дата регистрации: 19.11.2004
Вроде командой return не получается, т.к. можно использовать для возврата простые типы, символов можно только один.
Ratings: 0 negative/0 positive
Re: DLL в С++
NSF

Сообщений: 3853
Откуда: Пермь
Дата регистрации: 21.01.2005
MFC не устраивает? если да, то ходи сюда: forum.foxclub.ru + объявление для приведенного мной там примера:
#ifndef __CLTHRDSOC_H
#define __CLTHRDSOC_H
#define NSFDLLEXPORT _declspec(dllexport)
...
...
...
NSFDLLEXPORT short int GetErr(const char* , int );
...
...
...
#endif // __CLTHRDSOC_H


------------------
откапываю!
Ratings: 0 negative/0 positive
Re: DLL в С++
nnt64

Сообщений: 306
Откуда: С-Петербург
Дата регистрации: 02.03.2006
Pavel_Yu
Я пишу в С++:
int __export __stdcall NewMess (char *out)
{
out='1234567890';
return sizeof(out);


Поправочка:
**********************
.cpp
#include "dlltst.h"
#include <stdexcept>
using namespace std;

namespace dlltst
{
int retstr(char *str)
{
// Обязательно strcpy(memcpy) - тебе ж данные надо по своему адресу
// @str передать
str = strcpy(str, "1234567890");

return strlen(str);
}
}
********************************
.h
namespace dlltst
{
class dlltst
{
public:
// Returns length static __declspec(dllexport) int
int __stdcall retstr(char* str);
};
}
****************************
.def
LIBRARY DLLTST
EXPORTS
retstr @1
************************************
VFP
declare integer retstr in dlltst string @
lcs = space(10)
? retstr(@lcs)
? lcs

а вообще, через Fox API - лучше



Исправлено 1 раз(а). Последнее : nnt64, 25.05.06 10:57
Ratings: 0 negative/0 positive
Re: DLL в С++
AlexK

Сообщений: 2114
Откуда: Королев,Москва
Дата регистрации: 11.12.2000
В MFC:

extern "C" AFX_EXT_API int WINAPI func1(char *fname);
extern "C" AFX_EXT_API int WINAPI func1(CString &fname);


------------------
Береги природу, мать Вашу. Моя страничка www.genrep.net
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 12 (Гостей: 12)

© 2000-2024 Fox Club 
Яндекс.Метрика