Passing structures bet top level functions and DLL's

I need to access information stored in a structure(manipulated within a DLL)
from
the calling function. I defined the structure in the DLL include file and
#include "dll_include.h"
in the source code. The dll function manulipates the contents of the structure
as desired; however,
I can not get access to that structure from the calling function. If anyone
has any ideas, I would
certainly appreciate the help
Phil

Hi Phil
I think the key for this problem is simply to export that structure in the
dll that you want to access from the other app.
for example if you write in your dll_include.h file something like this:
typedef struct
ULONG ID;
CHAR Name[32];
} MY_APP_PERSON,*P_MY_APP_PERSON;
typedef void (*SET_PERSON)(void);
then in your dll source write:
#include "dll_include.h"
DLLEXPORT MY_APP_PERSON DllPerson;
DLLEXPORT void SetPerson()
DllPerson.ID = 3;
lstrcpy(DllPerson,"Daniel A.B");
In your other application which uses this dll write:
#include "dll_include.h"
static P_MY_APP_PERSON AppPerson;
static SET_PERSON SetPerson;
void main()
HINSTANCE dllHandle;
dllHandle=LoadLibrary("Persons.dll");
if(dllHandle)
AppPerson=(P_MY_APP_PERSON)GetProcAddress(dllHandle,"DllPerson");
SetPerson=(SET_PERSON)GetProcAddress(dllHandle,"SetPerson");
// Watch here with the debbuger the AppPerson structure state it
will probably containt dirty data
SetPerson();
// Now watch again the value of AppPerson and see it was changed
by calling SetPerson
Phil Spratt wrote in message
news:[email protected]..
>
> I need to access information stored in a structure(manipulated within a
DLL)
> from
> the calling function. I defined the structure in the DLL include file and
> #include "dll_include.h"
> in the source code. The dll function manulipates the contents of the
structure
> as desired; however,
> I can not get access to that structure from the calling function. If
anyone
> has any ideas, I would
> certainly appreciate t
he help
> Phil

Similar Messages

  • Export Layers as Files: Top Level Layers and Layers Sets

    Is there a script that can do the following that ImageReady was capable of?
    File/Export Layers as Files/
    I know there is a script that can just export the layer as files, but what I want to do is export the "Top Level Layers and Layer Sets" so that I can send several layers grouped under a folder as one image.
    Thanks! - j

    Something like this should work:
    // enable double clicking from the
    // Macintosh Finder or the Windows Explorer
    #target photoshop
    // Make Photoshop the frontmost application
    app.bringToFront();
    // Start at the top of the layers stack and select each
    // layer in turn
    for (var i = 0; i < activeDocument.layers.length; i++) {
    activeDocument.activeLayer = activeDocument.layers[i];
    // Put all your processing functions... //
    duplicateSelectedLayers(activeDocument.activeLayer.name);
    var psdSaveOptions = new PhotoshopSaveOptions();
    app.activeDocument.saveAs( File( "~/Desktop/" + activeDocument.name + ".psd" ), psdSaveOptions);
    app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
    // ...in the area between these two comments. //
    function duplicateSelectedLayers(soParent){
    var id2277 = charIDToTypeID( "Mk " );
    var desc304 = new ActionDescriptor();
    var id2278 = charIDToTypeID( "null" );
    var ref144 = new ActionReference();
    var id2279 = charIDToTypeID( "Dcmn" );
    ref144.putClass( id2279 );
    desc304.putReference( id2278, ref144 );
    var id2280 = charIDToTypeID( "Nm " );
    desc304.putString( id2280, soParent );
    var id2281 = charIDToTypeID( "Usng" );
    var ref145 = new ActionReference();
    var id2282 = charIDToTypeID( "Lyr " );
    var id2283 = charIDToTypeID( "Ordn" );
    var id2284 = charIDToTypeID( "Trgt" );
    ref145.putEnumerated( id2282, id2283, id2284 );
    desc304.putReference( id2281, ref145 );
    executeAction( id2277, desc304, DialogModes.NO );

  • How do we fetch the top-level users and groups for a particular resource

    Hi Experts,
    I need to fetch the top level users and groups (permissions) for a particular resource, Currently i am able to fetch the effective users list.
    Thanks.

    To elaborate...
    Here we need the users and groups who have direct access to the resource. We dont want to resolve groups.
    Please help us with the apis to use in our java code to fetch the users and groups.

  • How make the Top-level Navigation and Content Area in one page as a whole?

    I want to make the Top-level Navigation and the Content Area in the one page as a whole displayed in user interface.In the default framework,the Top-level Navigation and the Content Area were contained  in 2 pages, So the vertical scroll bar could only control the Content Area. I want to control the full page with  one vertical bar like the page of "www.sdn.sap.com" Web.

    Hi Jianguo,
    One advantage of the external facing portal solution (SP14) is that the framework page is displayed in a single frame. Perhaps this could be of use to you.
    Hope this helps.
    Daniel

  • Top Level Navigation and Web Page Composer

    Dear all,
    I've a Site on Web Page Composer, and on this I've many Web Pages, so I've generated a Site Navigation. The Site Navigation generate a Top Level Navigation entry (Portal Role with External Connector), in this case all pages are displayed on a single menu entry. I would like to separate the pages on some Top Level Navigation Entries, what is the recommended way to do it? Create the pages on separated Sites and generate Site Navigation for each on?
    To clarify I would like a menu structure like this:
    Info  (Top Level)
    Page1                        
    Page2                        
    Page5
    Customers (Top Level)
    Page 3
    Page 4
    Page 6
    Employees (Top Level)
    Page 7
    Page 8
    And just an one site with all pages on Web Page Composer.
    Best regards

    Hi,
    every Site Navigation creates only 1 navigation file that you can integrate into the users navigation.
    In your case:
    Role (PCD)
    Folder -> Info
    Folder -> Customers
    Folder -> Employees
    Create for every folder (that are entry points) in the role a web site in WPC.
    Ex:
    Web Site: Info
    Web Pages:
    Page1
    Page2
    Page5
    Create a site navigation and add the site navigation to your folder Info.
    br,
    Tobais

  • Top-level KW and exiftools

    My KW are in overarching categories - animals, places, etc. - with a bunch of kw in each - monkey, deer, Peru, Canada, etc. The top level words are set not to export, and all works fine for exporting. The top level kw are still written to the XMP of the DNG though, and when doing kw copy operations with exiftools they get copied. Any thoughts on avoiding this?
    THANKS

    A checkbox under "Include on Export" that reads "Do not write to file XMP" would be a good addition. If you open the raw in a program like ACDSee, these show up as well.

  • Passing parameters to table valued functions and using parameters as column name on select

    I am creating a function where I want to pass it parameters and then use those parameters in a select statement. When I do that it selects the variable name as a literal not a column. How do I switch that context.
    Query:
    ALTER FUNCTION [dbo].[ufn_Banner_Orion_Employee_Comparison_parser_v2]
    @BANNER_COLUMN AS VARCHAR(MAX),
    @ORION_COLUMN AS VARCHAR(MAX)
    RETURNS @Banner_Orion_Employee_Comparison TABLE 
    LAST_NAME nvarchar(max),
    EMPNO int,
    BannerColumnName nvarchar(max),
    BANNER nvarchar(max),
    ORION nvarchar(max)
    AS
    BEGIN
    INSERT INTO @Banner_Orion_Employee_Comparison
    (LAST_NAME, BANNER, ORION)
    SELECT
    a.LAST_NAME, @BANNER_COLUMN, @ORION_COLUMN
    FROM OPENQUERY(ORCLPROD_APDORACLE, 'select LAST_NAME, BANNER_RANK, BADGE, EMP_STATUS from XTRACT_VIEW') AS a
    inner join IWM_Stage.dbo.ViewPersonnel AS b
    on a.BADGE = b.badge
    WHERE a.EMP_STATUS = 'A'
    and a.BANNER_RANK <> b.[rank]
    RETURN;
    END;
    GO
    Output
    I execute this:
    select * from ufn_Banner_Orion_Employee_Comparison_parser_v2 ('a.BANNER_RANK' , 'b.[rank]')
    and get:
    Cerecerez NULL
    NULL a.BANNER_RANK
    b.[rank]
          

    George,
    You could go for using a CASE statement as earlier mentioned by Erland. This would look like below: (Downside is that you need to be mentioning all possible values in the CASE)
    ALTER FUNCTION [dbo].[ufn_Banner_Orion_Employee_Comparison_parser_v2]
    @BANNER_COLUMN AS VARCHAR(MAX),
    @ORION_COLUMN AS VARCHAR(MAX)
    RETURNS @Banner_Orion_Employee_Comparison TABLE
    LAST_NAME nvarchar(max),
    EMPNO int,
    BannerColumnName nvarchar(max),
    BANNER nvarchar(max),
    ORION nvarchar(max)
    AS
    BEGIN
    INSERT INTO @Banner_Orion_Employee_Comparison(LAST_NAME, BANNER, ORION)
    SELECT
    a.LAST_NAME
    , CASE @BANNER_COLUMN WHEN 'a.BANNER_RANK' THEN a.BANNER_RANK WHEN 'a.BADGE' THEN a.BADGE END --put values as required
    , CASE @ORION_COLUMN WHEN 'b.[rank]' THEN b.[rank] END --put values as required
    FROM OPENQUERY(ORCLPROD_APDORACLE, 'select LAST_NAME, BANNER_RANK, BADGE, EMP_STATUS from XTRACT_VIEW') AS a
    inner join IWM_Stage.dbo.ViewPersonnel AS b
    on a.BADGE = b.badge
    WHERE a.EMP_STATUS = 'A'
    and a.BANNER_RANK <> b.[rank]
    RETURN;
    END;
    GO
    Another method that I would suggest is to get all values from the function, then build a dynamic query to obtain results from it .. Something like:
    ALTER FUNCTION [dbo].[ufn_Banner_Orion_Employee_Comparison_parser_v2]()
    RETURNS @Banner_Orion_Employee_Comparison TABLE
    LAST_NAME nvarchar(max),
    EMPNO int,
    BannerColumnName nvarchar(max),
    BANNER nvarchar(max),
    ORION nvarchar(max)
    AS
    BEGIN
    INSERT INTO @Banner_Orion_Employee_Comparison(LAST_NAME, BANNER, ORION)
    SELECT
    * --Returns all the columns
    FROM OPENQUERY(ORCLPROD_APDORACLE, 'select LAST_NAME, BANNER_RANK, BADGE, EMP_STATUS from XTRACT_VIEW') AS a
    inner join IWM_Stage.dbo.ViewPersonnel AS b
    on a.BADGE = b.badge
    WHERE a.EMP_STATUS = 'A'
    and a.BANNER_RANK <> b.[rank]
    RETURN;
    END;
    GO
    --Execution
    DECLARE @BANNER_COLUMN AS VARCHAR(MAX), @ORION_COLUMN AS VARCHAR(MAX),@SQL NVARCHAR(MAX)
    SET @BANNER_COLUMN='BANNER_RANK'
    SET @ORION_COLUMN='[rank]'
    SET @SQL='
    select LAST_NAME,'+@BANNER_COLUMN+','+@ORION_COLUMN+' from ufn_Banner_Orion_Employee_Comparison_parser_v2 ()'
    PRINT @SQL
    EXEC @SQL
    You just need to make sure that the column names returned by the function are UNIQUE (Using proper alias names) so that you don't have a problem referring to them from the outside..
    Thanks,
    Jay
    <If the post was helpful mark as 'Helpful' and if the post answered your query, mark as 'Answered'>

  • How do I create a LLB that includes the top level VI and all SubVis for LabVIEW 8.0.1?

    I've searched the boards, and I have not found a solution for creating
    a LLB with all subVIs for LabVIEW 8.0.1.  I've seen the answer to
    use Save With Options.  I haven't been able to locate this. 
    I'm not too familiar with all of LabVIEWs options, so I greatly
    appreciate any help that can be offered on this.

    You can do Save As... and then go to Duplicate Hierarchy to new location and then under Packiging options, select custom and then check the box that says save as llb.
    Yo u can also specifiy the loaction of the files in this screen.
    Kenny
    Kenny

  • How to access Call Back Functions using *.dll in the Labview?

    Hai,
    I am Pavan Ram Kumar Somu.
    I am new to Labview, currently I am working on MVB Interface.
    I need to access the API functions from *.dll file in Labview, as of now , I am doing this with Call function Library node in Labview but it does not support the following data types like
        1. Pointer Arguments(To which memory it points in Labview)
        2. function pointers Arguments
        3 .pointers in structures and pointer structures in structures and many other data types.
    Please Answer the below queries also:
    1. How to pass pointer arguments to API functions in DLL and how to collect pointer  
        return types from API functions in DLL
    2. How to pass structure arguments to API functions in DLL and how to collect structure
        return types from API functions in DLL
    3. How to use callback functions(nothing but function pointers) in Labview and how to
        collect callback fuctions return types from API functions in DLL
    I need your help while passing these datatypes to API functions in DLL from labview.
    Suggest me if there is any other alternative for implementing this task.
    I am referencing some examples here:
    Examples:
    I)
    Unsigned short int gf_open_device(void *p_device_config, unsigned long int client_life_sign_timeout, unsigned short int *device_error)
    void *p_device_config: How to access/pass these arguments in LabView and to which memory location it points in LabView.
    II) #include <windows.h>
         #include <process.h>
         HANDLE rcvEvent0, rcvEvent1;
    /* Function call*/
    CanGetReceiveEvent(handle[0], &rcvEvent0);
    Above is a piece of C code, Now I want to use HANDLE datatype which is windows based, how to use these type in the LABVIEW.
    With regards
    Pavan Ramu Samu

    "Somu" <[email protected]> wrote in message news:[email protected]...
    Hai,
    I am Pavan Ram Kumar Somu.
    &nbsp;
    I am new to Labview, currently I am working on MVB Interface.
    &nbsp;
    I need to access the API functions from *.dll file in Labview, as of now , I am doing this with Call function Library node in Labview but it does not support the following data types like
    &nbsp;&nbsp;&nbsp; 1. Pointer Arguments(To which memory it points in Labview)
    &nbsp;&nbsp;&nbsp; 2. function pointers Arguments
    &nbsp;&nbsp;&nbsp; 3 .pointers in structures and pointer structures in structures and many other data types.
    &nbsp;
    Please Answer the below queries also:
    &nbsp;
    1. How to pass pointer arguments to API functions in DLL and how to collect pointer&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp; return types from API functions in DLL
    &nbsp;
    2. How to pass structure arguments to API functions in DLL and how to collect structure
    &nbsp;&nbsp;&nbsp; return types from API functions in DLL
    &nbsp;
    3. How to use callback functions(nothing but function pointers) in Labview and how to
    &nbsp;&nbsp;&nbsp; collect callback fuctions return types from API functions in DLL
    &nbsp;
    I need your help while passing these datatypes to API functions in DLL from labview.
    &nbsp;
    Suggest me if there is any other alternative for implementing this task.
    &nbsp;
    &nbsp;
    I am referencing some examples here:
    Examples:
    I)
    Unsigned short int gf_open_device(void *p_device_config, unsigned long int client_life_sign_timeout, unsigned short int *device_error)
    &nbsp;
    void *p_device_config: How to access/pass these arguments in LabView and to which memory location it points in LabView.
    &nbsp;
    II) #include &lt;windows.h&gt;
    &nbsp;&nbsp;&nbsp;&nbsp; #include &lt;process.h&gt;
    &nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp; HANDLE rcvEvent0, rcvEvent1;
    &nbsp;
    /* Function call*/
    CanGetReceiveEvent(handle[0], &amp;rcvEvent0);
    &nbsp;
    Above is a piece of C code, Now I want to use HANDLE datatype which is windows based, how to use these type in the LABVIEW.
    &nbsp;
    With regardsPavan Ramu Samu
    Search the forum (forums.ni.com) for callback, pointer or handle, and you'll find that it is all possible, but not very easy.
    e.g.: http://forums.ni.com/ni/board/message?board.id=170&message.id=88974&requireLogin=False
    Regards,
    Wiebe.

  • Help with this vi and top level vi's

    Hi, need a bit of help with this vi below. It consists of field point inputs. And also consists of 2 while loops, the first while loop basically displays the raw data, the second loop eventually will display processed data, but this will only take place when told to start by the push button connected to the case loop. the problem is that when i start the second loop and then go to stop it it keeps on running even when the case loop is false, any help greatly appreciated(also had help with a labview engineer, but could not solve it).
    The other way about going around this is to separate the 2 loops into separate vis. Is it possible to use the first loop as the top level vi and if i press a button on the toplevel front
    panel vi, the front panel of the second loop program pops up. Any info on this greatly appreciated.
    Thanks Stuart
    Attachments:
    basicscat1configxy1.41_changed.vi ‏207 KB
    XY_Chart_Buffer.vi ‏54 KB

    I have created another update to your example showing how you can have the xy graph popup in another window. This time it is in a library as there are now 2 VIs. Again i cant test it as i dont have Fieldpoint, but *crosses fingers* it should work. Basically i have moved the inner while loop into it's own VI, linked it to the controls feeding it, and placed it into the main case structure. This subVI has also had it's properties changed so that it opens when called and closes afterwards, so you do not need to open it manually when you start.
    As to what i use for my interface, i guess you mean interface with instruments?...Well i use drivers. And if i dont have drivers, i write them. To be honest, i dont really know what Fieldpoint does, so mayb
    e you can enlighten me there..
    Good luck with the PhD Chemists..working in a university myself i have an idea what it must be like for you!
    Kim
    Attachments:
    Basicscat1configxy1.41.llb ‏133 KB

  • Top level navigation to be re organized to come in one page

    Dear SDN,
    I have one requirement. I want to change the Portal Theme in such a way that Top level navigation to be re organized to come in one page istead of scrolling left or right. Suppose the user having more than 20 roles then he shouldnt be scrolling more times to left or right for the roles, thats why we want that in one page.
    Can anybody please help me to solve this. Is there any way where we can set all roles visible in one page??
    Thanks & Regards,
    Nikesh Shah.

    Nukesh
    I have given you the link above.
    You should read it
    There is a step wise procedure for how can you set Navigation Level to 0.
    I. Configure Top-Level Navigation
           1.      In the Portal Catalog choose Portal Users-> Standard Portal Users. This folder contains the Default Framework Page.
           2.      Right-click Default Framework Page and choose Open ->Object.
           3.      From the Page Content List, select the Top-Level Navigation iView and click Properties.
           4.      In the Navigation property category, scroll to the Number of Display Levels property and enter the value 0, 1, or 2, depending on how many navigation levels, if any, you want for top-level navigation.
    Choosing 0 removes top-level navigation and displays your navigation structure in the Detailed Navigation iView.
           5.      Click Save.
    II. Configure Detailed Navigation
           1.      From the Page Content List of the Default Framework Page, select Desktop Innerpage and click Open.
           2.      From the Page Content List of the Desktop Innerpage select the Detailed Navigation iView and click Properties.
           3.      In the Navigation property category, scroll to the Start at Level property and assign a value that is one higherthan the value of the Number of Display Levels property in procedure l. Configure Top-Level Navigation. For example, if top-level navigation is configured for one level, the detailed navigation begins on the second level, that is with the value 2.
    Detailed navigation is not automatically synchronized with top-level navigation; the values that you enter for top-level and detailed navigation must agree. For example, if you enter the value 1 for top-level navigation, while detailed navigation still has the value 3, one level is left out, creating a gap.
           4.      Click Save.
    III. Configure the Content Area
           1.      From the Page Content List of the Desktop Innerpage, select the Content Area iView and click Properties.
           2.      In the Navigation property category, scroll to the Number of Display Levels in TLN property and enter the same value as that of the Number of Display Levels property in procedure I. Configure Top-Level Navigation.
           3.      Click Save.
    Thanks...
    Edited by: Chetna  Verma on Aug 21, 2008 7:19 AM

  • How to exclude top-level keywords from export?

    Hi,
    I have keywords organised into a hierarchical structure; I never want the top-level keywords to appear in the exported image but can't find a quick way to do it.
    I can make it work by going to one of it's children and editing that keyword tag, unchecking the "export containing keywords" however I can't see a way of batch performing this action and the number of keywords I have make it impractical to do one by one.
    I tried clicking on the top-level keyword and unchecking the export option. It still exports and is even listed when I make the keyword tags dropdown "Will Export".
    If any of your gurus know the answer or can explain how I am misunderstanding the export terminology, please let me know...
    Thanks,
    Steve
    PS I have tried exporting with & without option "Write Keywords as Lightroom Hierachy"

    Thanks for that - its nearly right but I had tried doing that already and it didn't work.
    The reason why is when simply unchecked the Export Containing Keywords and Export Synonyms remain ticked but greyed out. I assumed that having been greyed out they are no longer effecting the output in any way but I was wrong.
    So, simply uncheck ALL the items in that dialogue box for top-level terms.
    Thanks again!

  • How to integrate third party API and DLL

    Dear sir/Madam
    How can i integrate the third party high level API and DLL into my DLL, project keeping in view that all their functions and their definitions kept hidden. i have tried it but when importing the functions in the DLL and export the high level functions, compiler demands their declarations and prototypes.
    Is their a way to hide all these high level functions and still utilize them.
    thanks, regards
    Zafar

    Hi Matrix39,
    The compiler will still need the proper prototypes for the functions called in the third party DLL to compile your DLL whether you are using explicit or implicit linking to call the functions.  Declaring these prototypes in your DLL does not mean they will be exported by your DLL.  The functions exported by your DLL can be configured by navigating to Build»Target Settings in CVI.  From here you can configure what functions your DLL exports by clicking the Change... button in the Export section.  There are several options for specifying the functions including using header files and manual export declarations.  See the CVI Help for more information.
    Justin D
    Applications Engineer
    National Instruments
    http://www.ni.com/support/

  • Not all Top level folders showing item count

    Hi there, I have Aperture 3.2.2 running on OSX 10.6.8.
    I use referenced files and a folder structure with a top folder and projects nested.
    Some of my top level folders when clicked, show ALL images in the projects nested below. Others do not. When I examine them in finder, nothing jumps out at me that is different. Have you any experience with this happening? Thanks, Deb

    Here is a screen shot.  Some of the blue folders will show all images nested in the projects below, some show nothing.  ie: 2013 shows all, but 2012, shows nothing.  You must click on each individual project to reveal the items contained.  I would like to click on each top level folder and see all items nested beneath.  There must be something I'm doing different, but for the life of me, can't figure it out.  Why some show and some don't.

  • Portal Top Level Navigation

    Hi,
        How can i remove the display bar on Top Level Navigation(Left side).
        Thanks.

    Hi Shah,
    Please follow the procedure:
    <b>To Configure Top-Level Navigation</b>
    1. In the Portal Catalog choose <i>Portal Users</i> -> <i>Standard Portal Users</i>. This folder contains the <i>Default Framework Page</i>.
    2. Right-click <i>Default Framework Page</i> and choose Open -> <i>Object</i>.
    3. From the Page Content List select the <i>Top-Level Navigation</i> iView and click <i>Properties</i>.
    4. Scroll to the <i>Number of Display Levels</i> property and enter the <b>value 0, 1, or 2</b>, depending on how many navigation levels, if any, you want for top-level navigation.
    <b> Choosing 0 removes your top-level navigation and displays your navigation structure in the Detailed Navigation iView. </b>
    5.Click Save.
    For more information see SAP Note <b>687485</b>.
    I hope this solves your problem.
    Regards
    Pravesh
    PS: Always consider rewarding points for helpful answer on SDN.

Maybe you are looking for

  • Issu for running insert statement in oracle procedure.

    Hi expert, I ran a oracle procedure with a insert statement inside as: insert into table1 select.... but I got error message related to this insert statement as "SQLERRM= ORA-08103: object no longer exists" I ran this statement separately in toad, no

  • Want to fetch two rows values into a single sql result

    Let me first explain the situation first I am having two tables 1. Animal_details(animal_id,and other details) 2. Animal_weight(animal_id,seq_no,weight,date_weighed) here actually situation is that for each weight I am inserting a new row with seq_no

  • Error when downloading from iTunes Store

    I'm trying to download an album, and one of the tracks is a video. When that video tried to download, it gave an error 42003. It said to check network connectivity and try again. Did that, but still the error. What does this error mean? What can I do

  • IMovie unusable: Is the problem the movie clip, iMovie, or my Mac?

    Ok, first off, I've tried this on my 1.42 GHz G4 eMac with 2 GB of RAM and a 160GB hard drive, and a 1.8 GHz G5 with 2 GB of RAM. Not much success with either machine. I imported a 720x480 video. Actually, Quicktime says its 720x480 (853x480), whatev

  • HT1766 iTunes page not showing

    iTunes page isn't showing and not able to update my apps