Здравствуйте!
Имеется
DLL:
	Код:
	library M3_78M;
var N: integer;
{$R *.res}
function GetValue(PM:pointer; out PN:pointer): boolean; stdcall; Export;
 var M: integer;
     MM: ^integer;
Begin
 GetValue:=false;
 MM:=PM;
 M:=MM^;
 N:=M+1;
 PN:=@N;
 GetValue:=true;
end;
{----------------------------------------------------------------------}
Exports GetValue;
begin
end. 
Осн. прога:
	Код:
	//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
 hM3_dll = LoadLibrary("M3_78M.dll");
 GetValue =(TGetValue)GetProcAddress(hM3_dll,"GetValue");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 int *Mumber, * *// Входной параметр
 **AMumber, * // Указатель (адрес) входного параметра
 * Number, * *// Выходной параметр
 **ANumber, * // Указатель (адрес) выходного параметра
	**AANumber; *// Указатель (адрес) указателя (адреса) вых. параметра
// Присвоение значения входному параметру
 Mumber=StrToInt(Edit2->Text);
// В качестве входного параметра подпрограммы
// *используются указатель (адрес)
 AMumber=&Mumber;
// В качестве выходного параметра подпрограммы
// *используются указатель указателя
// (адрес адреса)
 AANumber=&ANumber;
 GetValue(AMumber, AANumber); * *// Вызов подпрограммы
// Извлечение значения выходного параметра по указателю
 Number=*ANumber;
 Edit1->Text=IntToStr(Number);
 Application->ProcessMessages();
}
//--------------------------------------------------------------------------- 
Заголовок:
	Код:
	//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
	TButton *Button1;
	TEdit *Edit1;
	TEdit *Edit2;
	void __fastcall Button1Click(TObject *Sender);
	void __fastcall FormActivate(TObject *Sender);
private:	// User declarations
public: *// User declarations
	__fastcall TForm1(TComponent* Owner);
};
//====================================================================//
 typedef bool (WINAPI *TGetValue)(int*, int**); *// ** !
 TGetValue GetValue;
 HINSTANCE hM3_dll;
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif 
Проект простой. На форме одна кнопка и два поля TEdit. По нажатии на кнопку происходит увеличение содержимого Edit2 на единицу и результат заносится в Edit1.
Почему в C++ входной параметр воспринимается как ссылка, а выходной - как 
ссылка ссылки?
При этом, если основная прога написана на Делфи, то всё ожидаемо: и входной, и выходной параметры воспринимаются как ссылки на числа.
Извращался по всякому. И cdecl ставил, и var вместо out. Один фиг...
Это так задумано, или я где-то накосячил? Полдня лопатил всемирную помойку, ничего не нашёл.
Подскажите, плз., если кто сталкивался.