As we know CCpfcAsyncConnection.Connect would give ambiguity exception if there are more than one Creo session is there. In such case, GetConnectionId will help us to connect to specific Creo session. To get connection ID, we have option to get so by API GetConnectionId. I am having confusion of usage of this API GetConnectionId , i.e. how to use this same API to identify two or three different connection string based on number of active sessions.
Any thought would be helpful as I would like to give option to use end application based on session model name his / her application is going to get connected for automation purpose.
Thanks and Regards
extern ProError ProEngineerConnect( char *proe_session_id, char *display,
char *user, char *textpath,
unsigned int timeout_sec,
ProProcessHandle *p_handle );
I don’t get your point, here you can use the session ID on connect.
We used to pass null string as session ID and it connects to Creo session if there is only one Creo running...
However, it fails to connect of there are more than one session. How to know session ID before connecting is my concern.
I know its not much since you most likely know all that is mentioned here, but some info can be found here:
Not much help to your original question though.
Yeah I tried to get id also from a single Creo session earlier and find what connection string represent... But could not figure out how to create one as required
Because you pass <NULL>, if you pass NULL it will try to connect on the local machine only.
You can't expect a Genius if you pass NULL, or you allow random session, then it will connect, but this is random 🙂
If everything happen on one machine, write the id on user init to a file, and delete on terminate.
I would write a small socket Server
It is not that complicated if you do this by writing the data to a file share.
Yeah that is what it should be when we use null as connection id..
Yes we have requirement on local machine... But I don't get what you mentioned... I am as a programmer not opening Creo session... It has been opened by application end user without running application... He / she has manually open two sessions before execution of application... So, application don't have connection id of user opened sessions. Now how to connect to one session as we don't have id with us.
Hello , i wrote a function via VBA and java, VB also has the simliar method
the process you need to do is records the first Creo's ID, and write it to somewhere, then connect with session by ID, no matter how many Creos you open after that recording, the connection would be right
below is the method to write the ID to a file
in pro/toolkit - the common way dealing with connection handles is to run a sync app (with auto start) which does nothing other than having user_init(...) writing the connection string (which is an output of ProEngineerConnectIdGet(...)) to a text file at some known location and writing whatever info an async app would use to identify this pro/e session as one which the async app would need to connect to. In the async app, the first order of business would be to scan the known location for files containing a connection string, do some logic to extract the wanted connection string, and to connect to pro/e session with ProEngineerConnect(...) using the extracted connection string as the first argument and using PRO_B_FALSE to disable random connections.
The combo ProEngineerConnect(...) -> ProEngineerConnectIdExtract(...) is used in cases when an async app would connect at random Pro/E session at first , do whatever, disconnect and than would need to connect to the same session again. In that scenario the ProProcessHandle output argument would be processed by ProEngineerConnectIdExtract(...) and the connection string would be stored for future use.
This seems good... We do have toolkit license and can be implemented like what you have mentioned... I believe the id fetched from toolkit api and written into text file would work if used by VBAPI session connect... If this is perfect, we are done it seems...
Additionally , if one has no toolkit license and only vbapi is there, is it not at all possible to connect to one session provided more than one session are running by end user before app got started..?
If you don’t care, allow random select. If the app is unlocked you don’t need to take about a TK Lizenz. On top you can execute a remote dll call on the connect session or run a MK, because you run asyn. Just take care that the event loop is not locked by the user.