|
|
|
проблема с dll
|
|||
|---|---|---|---|
|
#18+
у меня есть dll в которой записан клас и он использует структуру которая тамже объявлена нополучается фигня все работает но при передаче структури данние в ней путаются или равны 0 может кто подскажет что нетак а то уже надоело на одном месте сидеть заранее спасиба ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2004, 18:24 |
|
||
|
проблема с dll
|
|||
|---|---|---|---|
|
#18+
Код кинь сюда посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2004, 07:23 |
|
||
|
проблема с dll
|
|||
|---|---|---|---|
|
#18+
вот код здесь он несовсем в оригинале я его немного пытался исправить пытался разные варианты но ничего неполучилось //------------------------------------------------- #ifndef Unit_3D_OperationH //#define Unit_3D_OperationH #ifndef DynamicClassH #define DynamicClassH //--- #include <Vector.h> #include <Algorithm.h> #include <iostream.h> #include<functional.h>//======================== #include "..\UNIT 511\Ks_TLB.h" #include "..\UNIT 511\ldefin2d.h" #include "..\UNIT 511\ldefin3d.h" //#include ".\UNIT\KsLoft.h" //--- #include <Dialogs.hpp> #include <stdlib.h> //--------------------------------------------------------------------------- //#ifdef __cplusplus //extern "C" { //#endif //#ifdef Unit_3D_OperationH //#define IMPORT_EXPORT __declspec(dllexport) //#else //#define IMPORT_EXPORT __declspec(dllimport) //#endif /*class Shield { public: IMPORT_EXPORT void __stdcall Drob(char &Key,AnsiString &Text); IMPORT_EXPORT void __stdcall Real(char &Key,AnsiString &Text); IMPORT_EXPORT void __stdcall OtricDrob(char &Key,TEdit* &Ed); IMPORT_EXPORT int __stdcall ProwMinMax(double &Min,double &Max,double &Cheslo,AnsiString Message); }; */ //------------------------------------------------------------------------------ __declspec(dllexport)struct TThin { bool Thin; short ThinDirect; // Òèïû íàïðàâëåíèé // dtNormal = 0 ïðÿìîå íàïðàâëåíèå (íàðóæó) // dtReverse = 1 îáðàòíîå íàïðàâëåíèå (âíóòðü) // dtBoth = 2 â îáå ñòîðîíû // dtMiddlePlane= 3 îò ñðåäíåé ïëîñêîñòè double normalThickness; double reverseThickness; }; struct TSideParam { //bool forward; // íàïðàâëåíèå âûäàâëèâàíèÿ (TRUE - ïðÿìîå íàïðàâëåíèå) short type_n; // òèï âûäàâëèâàíèÿ  ïðÿìîì íàïðàâëåíèè short type_r; // òèï âûäàâëèâàíèÿ  îáðàòíîì íàïðàâëåíèè // etBlind = 0 ñòðîãî íà ãëóáèíó // etThroughAll = 1 ÷åðåç âñþ äåòàëü // etUpToVertexTo = 2 íà ðàññòîÿíèå äî âåðøèíû // etUpToVertexFrom = 3 íà ðàññòîÿíèå çà âåðøèíó // etUpToSurfaceTo = 4 íà ðàññòîÿíèå äî ïîâåðõíîñòè // etUpToSurfaceFrom = 5 íà ðàññòîÿíèå çà ïîâåðõíîñòü // etUpToNearSurface = 6 äî áëèæàéøåé ïîâåðõíîñòè double depth_n; // ãëóáèíà âûäàâëèâàíèÿ  ïðÿìîì íàïðàâëåíèè double depth_r; // ãëóáèíà âûäàâëèâàíèÿ  îáðàòíîì íàïðàâëåíèè double draftValue_n; // âåëè÷èíà óãëà óêëîíà  ïðÿìîì íàïðàâëåíèè double draftValue_r; // âåëè÷èíà óãëà óêëîíà  îáðàòíîì íàïðàâëåíèè bool draftOutward_n; // óêëîí íàðóæó  ïðÿìîì íàïðàâëåíèè bool draftOutward_r; // óêëîí íàðóæó  îáðàòíîì íàïðàâëåíèè double ang_n; // âåëè÷èíà óãëà âðàùåíèÿ â ïðÿìîì íàïðàâëåíèè double ang_r; // âåëè÷èíà óãëà âðàùåíèÿ â îáðàòíîì íàïðàâëåíèè bool LoftClosed; //ïðèçíàê çàìêíóòîñòè òðàåêòîðèè ëîôòèíãà bool autoPath; //ïðèçíàê àâòîìàòè÷åñêîãî ôîðìèðîâàíèÿ òðàåêòîðèè short directionType; // Òèïû íàïðàâëåíèé // dtNormal = 0 ïðÿìîå íàïðàâëåíèå // dtReverse = 1 îáðàòíîå íàïðàâëåíèå // dtBoth = 2 â îáå ñòîðîíû // dtMiddlePlane = 3 îò ñðåäíåé ïëîñêîñòè }; //---------------Ïàðàìåòðû ñïèðàëè---------------------------------------------- __declspec(dllexport)struct TSpiralParam { short buildMode; //ïî ÷åì ñòðîèòü bool buildDir; //íàïðàâëåíèå ñïèðàëè bool turnDir; //íàïðàâëåíèå âèòêîâ double diam; //äèàìåòð double height; //âèñîòà double turn; //êîëè÷åñòâî âèòêîâ double Xc; //ÌÒÐ ñïèðàëè double Yc; // //-----------Ïàðàìåòðè êîíè÷åñêîé ñïèðàëè------------ double initialdiam; //íà÷àëüíûé äèàìåòð double terminaldiam;//êîíå÷íûé äèàìåòð }; //----------------Ïàðàìåòðû êîïèè ïî ñåòêå ------------------------------------- __declspec(dllexport)struct TMeshCopy { double angle1; //óãîë íàêëîíà double count1; //êîëè÷åñòâî bool factor1; //ïîëíûé øàã double step1; //øàã double angle2; //óãîë íàêëîíà double count2; //êîëè÷åñòâî bool factor2; //ïîëíûé øàã double step2; //øàã bool insideFlag; }; //----------------Ïîêàçàòü èëè ñêðèòü êîíñòðóêòèâíûå åëåìåíòû ------------------ __declspec(dllexport)struct TConstrElement { bool hidden; }; //---------------- Öâåòà ------------------------------------------------------- __declspec(dllexport)struct TDetColour { double transparency; double ambient; double diffuse; double emission; double shininess; double specularity; }; //------------------------------------------------------------------------------ __declspec(dllexport) class TEskiz { private: ksSketchDefinition * sketchDef; public: ksPart * part; ksDocument2D * Eskiz; ksEntity * ksEskiz ; ksEntity * basePlane; ksEntity * baseAxis; TConstrElement Constr; __fastcall TEskiz(ksDocument3D * doc); /*{ part = (ksPart*)doc->GetPart(pNew_Part); // íîâûé êîìïîíåíò basePlane = (ksEntity*)part->GetDefaultEntity( o3d_planeXOY); baseAxis = (ksEntity*)part->GetDefaultEntity( o3d_pointCS); Constr.hidden = true; } */ int __fastcall CreateEskiz(void); int __fastcall CloseEskiz(void); int __fastcall SetBasePlane(short ObjType); //çàäàòü áàçîâóþ ïëîñêîñòü int __fastcall SetOffsetPlane(double Offset,short TypeBasePlane,bool direction);//ïëîñêîñòü íà ðàñòîÿíèè îò äðóãîé int __fastcall SetExistPlane(double X,double Y,double Z); //íà ðàñòîÿíèè îò ïëîñêîñòè íà äåòàëå int __fastcall SetOffsetExistPlane(double Offset,double X,double Y,double Z,bool direction); //÷òîòî âðîäå ïðåäûäóùåé int __fastcall Axis2Planes(double X1,double Y1,double Z1,double X2,double Y2,double Z2); //îñü î äâóì ïëîñêîñòÿì int __fastcall GetPlane3Point(double X1,double Y1,double Z1,double X2,double Y2,double Z2,double X3,double Y3,double Z3);//ïëîñêîñòü ÷åðåç 3 âåðøèíû int __fastcall GetPlane3Point(double Arr[]); int __fastcall GetPlaneToAngle(double angle,double XP,double YP,double ZP,double XE,double YE,double ZE); //ïëîñêîñòü ïîä óãëîì int __fastcall AxisOperation(); int __fastcall GetAxis2Points(double X1,double Y1,double Z1,double X2,double Y2,double Z2); int __fastcall GetAxisEdge(double X,double Y,double Z); }; __declspec(dllexport)class T3DOperation { private: ksEntityCollection * Clip; ksEntityCollection * EdgeFase; ksEntityCollection * Eskizs; //---------- //bool forward; // íàïðàâëåíèå âûäàâëèâàíèÿ (TRUE - ïðÿìîå íàïðàâëåíèå) //TSideParam SideParam; //--------- public: TSideParam SideParam; TSpiralParam SpiralParam; TMeshCopy Mesh; TThin Thin; TDetColour Coler; __fastcall T3DOperation(void) { // Çàïîëíåíèå ñòðóêòóðû ïàðàìåòðîâ îïåðàöèé ïî óìîë÷àíèþ SideParam.directionType = dtBoth; // Ôîðìîîáðàçóþùåå Íàïðàâëåíèå // Îïåðàöèè âûäàâëèâàíèÿ SideParam.depth_n = 50; //Ãëóáèíà âûäàâëèâàíèÿ SideParam.draftOutward_n = false; //Óêëîí âîâíóòðü SideParam.draftValue_n = 0; //Óãîë óêëîíà â ãðàäóñàõ SideParam.type_n = etBlind; //Òèï âûäàâëèâàíèÿ SideParam.depth_r = 50; //Ãëóáèíà âûäàâëèâàíèÿ SideParam.draftOutward_r = false; //Óêëîí âîâíóòðü SideParam.draftValue_r = 0; //Óãîë óêëîíà â ãðàäóñàõ SideParam.type_r = etBlind; //Òèï âûäàâëèâàíèÿ // Îïåðàöèè âðàùåíèÿ SideParam.ang_n = 180; // Óãîë äëÿ îïåðàöèé âðàùåíèÿ SideParam.ang_r = 180; // Óãîë äëÿ îïåðàöèé âðàùåíèÿ //Îïåðàöèè ïî ñå÷åíèÿì SideParam.LoftClosed = false; //ïðèçíàê çàìêíóòîñòè òðàåêòîðèè ëîôòèíãà SideParam.autoPath = true; //ïðèçíàê àâòîìàòè÷åñêîãî ôîðìèðîâàíèÿ òðàåêòîðèè // Çàïîëíåíèå ñòðóêòóðû ïàðàìåòðîâ òîíêîé ñòåíêè ïî óìîë÷àíèþ Thin.Thin = false; // Òîíêàÿ ñòåíêà åñòü Thin.ThinDirect = 2; // Íàïðàâëåíè òîíêîé ñòåíêè Thin.normalThickness = 1; // Òîëùèíà â ïðÿìîì íàïðàâëåíèè Thin.reverseThickness = 1; // Òîëùèíà â îáðàòíîì íàïðàâëåíèè //----------------- Clip = NULL; EdgeFase = NULL; Eskizs = NULL; // VerteX = NULL; //----------------- //Ñïèðàëü SpiralParam.buildDir = true; SpiralParam.buildMode= 2; SpiralParam.diam = 50; SpiralParam.turnDir = true; SpiralParam.height = 40; SpiralParam.turn = 10; SpiralParam.Xc = 0; SpiralParam.Yc = 0; SpiralParam.initialdiam = 10; SpiralParam.terminaldiam = 30; //Êîïèÿ ïî ñåòêå Mesh.angle1 = 0; Mesh.count1 = 3; Mesh.factor1 = false; Mesh.step1 = 10; Mesh.angle2 = 90; Mesh.count2 = 1; Mesh.factor2 = false; Mesh.step2 = 10; Mesh.insideFlag = true; //-öâåòà Coler.transparency = 1; Coler.ambient = 0.8; Coler.diffuse = 0.8; Coler.emission = 0.5; Coler.shininess = 0.2; Coler.specularity = 0.4; } ; __property TSideParam SideParamA = { write = SideParam , read = SideParam }; /* write = directionType;// = dtBoth; // òèï âûäàâëèâàíèÿ  ïðÿìîì íàïðàâëåíèè // èè âûäàâëèâàíèÿ // òèï âûäàâëèâàíèÿ  îáðàòíîì íàïðàâëåíèè write = depth_n;// = 50; // etBlind = 0 ñòðîãî íà ãëóáèíó write = draftOutward_n;// = false; // etThroughAll = 1 ÷åðåç âñþ äåòàëü write = draftValue_n;// = 0; // etUpToVertexTo = 2 íà ðàññòîÿíèå äî âåðøèíû write = type_n;// = etBlind // etUpToVertexFrom = 3 íà ðàññòîÿíèå çà âåðøèíó write = depth_r;// = 50; // etUpToSurfaceTo = 4 íà ðàññòîÿíèå äî ïîâåðõíîñòè write = draftOutward_r;// = false; // etUpToSurfaceFrom = 5 íà ðàññòîÿíèå çà ïîâåðõíîñòü write = draftValue_r;// = 0; // etUpToNearSurface = 6 äî áëèæàéøåé ïîâåðõíîñòè write = type_r;// = etBlind // ãëóáèíà âûäàâëèâàíèÿ  ïðÿìîì íàïðàâëåíèè // è âðàùåíèÿ // ãëóáèíà âûäàâëèâàíèÿ  îáðàòíîì íàïðàâëåíèè write = ang_n;// = 180; // âåëè÷èíà óãëà óêëîíà  ïðÿìîì íàïðàâëåíèè write = ang_r;// = 180; // âåëè÷èíà óãëà óêëîíà  îáðàòíîì íàïðàâëåíèè // ïî ñå÷åíèÿì // óêëîí íàðóæó  ïðÿìîì íàïðàâëåíèè write = LoftClosed;// = false; // óêëîí íàðóæó  îáðàòíîì íàïðàâëåíèè write = autoPath;// = true; // âåëè÷èíà óãëà âðàùåíèÿ â ïðÿìîì íàïðàâëåíèè */ int __fastcall BaseExtrusion(ksDocument3D *doc,TEskiz *Eskiz); //áàçîâàÿ îïåðàöèÿ âûäàâëèâàíèÿ int __fastcall CutExtrusion(ksDocument3D *doc,TEskiz *Eskiz); // 26 âûðåçàòü âûäàâëèâàíèåì int __fastcall BossExtrusion(ksDocument3D *doc,TEskiz *Eskiz); // 25 ïðèêëåèâàíèå âûäàâëèâàíèåì int __fastcall BaseRotate(ksDocument3D *doc,TEskiz *Eskiz,bool toroidShape); // 27 áàçîâàÿ îïåðàöèÿ âðàùåíèÿ int __fastcall CutRotate(ksDocument3D *doc,TEskiz *Eskiz,bool toroidShape); // 29 âûðåçàòü âðàùåíèåì int __fastcall BossRotate(ksDocument3D *doc,TEskiz *Eskiz,bool toroidShape); // 28 ïðèêëåèâàíèå âðàùåíèåì int __fastcall BaseLoft(ksDocument3D *doc,TEskiz *Eskiz,ksEntityCollection *PartArray); // 30 áàçîâàÿ îïåðàöèÿ âðàùåíèÿ int __fastcall BaseLoft(ksDocument3D *doc,TEskiz *Eskiz); int __fastcall CutLoft(ksDocument3D *doc,TEskiz *Eskiz,ksEntityCollection *PartArray); // 32 âûðåçàòü âðàùåíèåì int __fastcall CutLoft(ksDocument3D *doc,TEskiz *Eskiz); int __fastcall BossLoft(ksDocument3D *doc,TEskiz *Eskiz,ksEntityCollection *PartArray); // 31 ïðèêëåèâàíèå âðàùåíèåì int __fastcall BossLoft(ksDocument3D *doc,TEskiz *Eskiz); int __fastcall BaseKinematik(ksDocument3D *doc,TEskiz *Eskiz/*,ksEntityCollection *PartArray*/,short type); // 47 âûðåçàòü êèíåìàòè÷åñêè int __fastcall BaseKinematik(ksDocument3D *doc,TEskiz *Eskiz,ksEntityCollection *PartArray,short type); // 47 âûðåçàòü êèíåìàòè÷åñêè int __fastcall BossKinematik(ksDocument3D *doc,TEskiz *Eskiz,ksEntityCollection *PartArray,short type); // 46 ïðèêëåèíòü êèíåìàòè÷åñêè int __fastcall BossKinematik(ksDocument3D *doc,TEskiz *Eskiz,short type); // 46 ïðèêëåèíòü êèíåìàòè÷åñêè int __fastcall CutKinematik(ksDocument3D *doc,TEskiz *Eskiz,ksEntityCollection *PartArray,short type); int __fastcall CutKinematik(ksDocument3D *doc,TEskiz *Eskiz,short type); ///-------------------------------------------------------------------------------- int __fastcall SpLine(ksDocument3D *doc,TEskiz *Eskiz,double Arr[],int Syze); int __fastcall PolyLine(ksDocument3D *doc,TEskiz *Eskiz,double Arr[],int Syze); int __fastcall SpLine(ksDocument3D *doc,TEskiz *Eskiz,vector<double> Arr); int __fastcall PolyLine(ksDocument3D *doc,TEskiz *Eskiz,vector<double> Arr); int __fastcall Spiral(ksDocument3D *doc,TEskiz *Eskiz); //îïåðàöûÿ ñïèðàëü öûëèíäðè÷åñêàÿ :-)) int __fastcall ConicSpiral(ksDocument3D *doc,TEskiz *Eskiz); // 54 Êîíè÷åñêàÿ ñïèðàëü int __fastcall CreateFaska(ksDocument3D *doc,TEskiz *Eskiz,double a,double b); // 33 îïåðàöèÿ "ôàñêà" int __fastcall CreateFille(ksDocument3D *doc,TEskiz *Eskiz,double radius); // 34 îïåðàöèÿ "ñêðóãëåíèÿ" int __fastcall CutByPlane(ksDocument3D *doc,TEskiz *Eskiz,bool direction); //ñå÷åíèå ïëîñêîñòüþ int __fastcall CutByEskiz(ksDocument3D *doc,TEskiz *Eskiz,bool direction); //ñå÷åíèå åñêèçîì int __fastcall MirrorAllOperation(ksDocument3D *doc,TEskiz *Eskiz); //îòîáðàçèòü ñåìåòðè÷íî âñå int __fastcall MirrorOperation(ksDocument3D *doc,TEskiz *Eskiz); //ñèìåòðèÿ int __fastcall ShellOperation(ksDocument3D *doc,TEskiz *Eskiz,double a,bool Thin); //îïåðàöûÿ îáîëî÷êà int __fastcall MeshCopy(TEskiz* Esk,int Kol,double Angle,bool direct); //êîïèÿ ïî ñåòêå //-------------------Ðàáîòà ñ ìàñèâàìè åëåìåíòîâ------------------------ int __fastcall AddLastObjToClip(TEskiz*Esk); //äîáàâèòü ïîñëåäíèé îáåêò int __fastcall AddToCollEdgeBypoint(float x , float y, float z, TEskiz*Esk); //äîáàâèòü ãðàíü int __fastcall AddToCollFaceBypoint(float x , float y, float z, TEskiz*Esk); //äîáàâèòü ïëîñêîñòü int __fastcall AddEskiz(TEskiz*Esk); //äîáàâèòü åñêèç åñêèç int __fastcall ClearEdgeFase(void); int __fastcall ClearEskizs(void); //ïî÷èñòèòü ìàñèâ //-------------------Ðàáîòà ñ òåêñòîâûì ôàéëîì-------------------------- // int __fastcall OpenTextFile(char * name,ksDocument3D *doc); int __fastcall CircularCopy(TEskiz* Esk,int Kol,double Angle,bool direct); // 36 îïåðàöèÿ êîïèðîâàíèÿ ïî êîíöåíòðè÷åñêîé ñåòêå //int AxisOperation(TEskiz* Esk); //îñü îïåðàöèè //-----------------------Îïåðàöèè ñ ñáîðêàìè---------------------------- int __fastcall AddBaseModel(char* FileName,ksDocument3D * doc); int __fastcall MoveModel(ksDocument3D * doc,double x,double y,double z,double detal); int __fastcall SetColorDet(ksDocument3D * doc,AnsiString Name,Byte red = 128,Byte green = 128,Byte dlue = 128); }; //------------------------------------------------------------------------------ //#ifdef __cplusplus //} //#endif #endif ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2004, 15:06 |
|
||
|
проблема с dll
|
|||
|---|---|---|---|
|
#18+
Капец :) А порезать немного ты его не мог? Запутался я там... Вобщем какие есть вообще идеи: 1. Передавать указатель на структуру. 2. Если уж совсем ничё не получается, написать пару функцаек: get & put, c параметром: указатель на структуру. И через него общаться. С прямым обращением в область памяти видимо не получится. (Надо подумать, почему) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2004, 16:44 |
|
||
|
проблема с dll
|
|||
|---|---|---|---|
|
#18+
А еще какие будут советы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2004, 18:28 |
|
||
|
проблема с dll
|
|||
|---|---|---|---|
|
#18+
сложно все это .. в С++ без разницы , что класс что структура в структуре тож можно конструктор сделать .. в DLL отсутствует стек .. те статические переменные девать некуда .. надо использовать выделение памяти (new || malloc) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2004, 13:52 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32443746&tid=2035232]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
72ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 406ms |

| 0 / 0 |
