Leading underscore in function name - Windows Mobile Development and Hacking General

Hi!
I try to integrate an external library into my vs2005 project while using the Windows Mobile 6 SDK. Of course, I added the additional directories and dependencies to the project settings, but I get some LNK2019 errors anyway.
So I created a dump of the *.lib files using "dumpbin.exe" and discovered that all function names start with a leading underscore. I found some precompiled parts of the library where there are no leading underscores in the function names and I can call them without any problems. But if I build those parts of the library on my own, there again are the LNK2019 errors and the "_functionname()" convention in the *.lib files.
Is there either a way to avoid those underscores when compiling the library or to call those function out of a windows mobile application?
Thanks in advance!

This looks a bit odd.
C++ decorates exported functions unless you add a def file to the project, but there is always way more garbage in the names.
What I don't understand is, why do you have a problem using a function that starts with an underscore?
Such names are perfectly acceptable in C / C++, in fact some C native functions like _wfopen start with an underscore.
What language are you programming in?
Also it might help find the solution, if you tell us what library you are using. Is it something available for download or your own creation?

Thanks for your quick reply.
I am working on a porting of the intel openCV computer vision library and I try to include it into a VS2005 C++ projekt created with the wizard for windows mobile 6.0 sdk for testing.
It seems that the problem appears when I switch the system to "/SUBSYSTEM:WINDOWSCE". Otherwise the library works perfectly.

Related

name garbaling in dll

I am using some functions in a dll but the only way I can get the name of the function to remain as I name it is to make it extern "c". If I do not do this then I have to copy the name from directly inside the dll and put the garbled text in my code, ed "someFunctionName" ends up "[email protected]@YAHXZ". It seems that every example I ever see dose not have this problem. Is there some setting I do not know about to force the linker to use the names I type without using a def file?
It was my understanding that this has something to do with C++ convention and cannot be changed, though I could be wrong on this point and if so, would also like to earn the answer.
Mean while if you are using functions from your DLL in your own code you can link to it "implicitly" (am I confusing the terms here?) by simply linking in the lib file compiler creates for the DLL and using the regular function names without all the garbage.
I think that what I am seeing is microsoft ("decoration") not from c++. I think the c++ name mangaling follows some rules that let it show the size of data being passed as arguments.
I do not want to link to it and use .lib etc because I do not want my main project to be entangled with the dll. I am trying to make a pluggin so it will be dynamically loaded with loadlibrary and getprocaddress. I am a bit new to this but it seems to work ok, I was just not sure how to use the def file properly. For example what are the rools regarding the order of names in the def as compared to the header file and what about variables, are they exported or do I have to have a function that returns a pointer to them.
Well some of MS help I encountered states that DEF files are obsolete, or at least MS is trying to make them so.
I didn't get deep in to the DLL rules my self but from what I understand it is sufficient to declare a function as _dllexport for it to be seen from the outside. If you want to specific ordinals (like in the plug-in case) that's another matter.
Variables can be exported and so are classes. I never tried using it, but the "hello world" example of a DLL that eVC 4 builds exports a function a class and a variable and does not use DEF file.
and after building that automatically generated code I get a dll with decorated function names (I view the dll in notepad to check). At first I could not figure out what was going on but after I put the decorated names into getprossaddres it works.

Application programming for HTP P3300 (ARTEMIS) and a few questions

As I'm new in this forum: Hi everybody!
I have been programming Windows CE-based devices for many years, but no experience yet with the HTC ARTEMIS (P3300). Therefore, I've a few questions and hope to get answers from this forum:
- I assume, it is possible to program visual-C++ based applications for the programme. SDK for Windows Mobile should be available at Microsoft. Is that correct?
All further questions are based on the assumption that visual-C++ (or embedded VC) is used for application development.
1. Is it possible to direclty receive incoming Short Messages (SMS) via the application? (Any keyword on how this works would also be welcome)
2. Is it possible to query the battery status from the device?
3. Can the GSM module easily be accessed and can Cell-IDs or carrier IDs be read from the device? (In particular, I want to identify the home country of the current mobile carrier) - If yes, how does it work?
4. Is it possible to restrict the appearance of the ARTEMIS. I.e., the user should only be able to access "my" application and mobile phone (voice) features. All other applications and system functions shall be hidden to the user.
Thanks in advance and kind regards,
ma_gu
yeah the stk can be downloaded and accessed from visual studio
1. i would asume so even if it had to be don with a dll hook
2. yeah many 3th party applications can display it asume there is an api call to get it
3. yeah there is an api forget the name searching in this forum should give some hits
4. yeah but if they hardreset or reflash the device it would be more troublesome
Hi Rudegar,
thanks for your fast reply. That sounds good and I think, I'll be able to find the regarding API calls (anyway, if somebody could provide some keywords, it would be very welcome).
But I have never restricted the appearance of any Windows-CE based device (question #4). How can this be done? At the beginning, I assumed that this needs rebuilding of the operating system via a system builder, but that's obviously not the case. Can you give me some hints on how to do this?
Kind regards,
ma_gu
http://forum.xda-developers.com/showthread.php?t=256646&highlight=programming
the api is called ril
depend on who you wanna develop really
1 option is making pure arm code (kinda skipping the ce) using gcc compiler for arm
2 option is the high lvl c# .net or c++ .net path but it's not that fast and dont have as much os access as pure win32 stk and even microMFC
3 option microMFC old ms class lib for c++ oop the granddad of .net you might say
4 pure win32 stk you handle the msg loop and everything more work but more power where many developrs who do today items and programs end up
if you can live with .net it's the easy path
if you want more then starting with microMFC and moving on to pure win32stk is prob the thing
java is not that well supported by wm imho
oooh yeah and you dont use platform builders and stuff like that
unless you are building roms from scratch and got access to all drivers for spc devices
you start a new project in embedded visual stuio or visual stuio 200X
and pick your path as in .net or the likes
and then you can debug using a simulator or directly on the device
it use activesync to get the exe there
otherwise you can normaly activesync the exe file to your device and run it directly
or copy it to a sd card and run it from there

New version V11 of C# IDE Mobile (MAJOR IMPROVEMENTS)

New version V11 of C# IDE Mobile (MAJOR IMPROVEMENTS)
C# IDE Mobile is an application (totally free) that I've developed to be able to develop with C#/.NET2CF directly on the Pocket PC-Windows Mobile 5/6 (it doesn't require the .NET SDK, you don't need a desktop computer).
You can download the new version at:
http://www.geocities.com/hrowson/wm5_software/index.htm
or from my personal page:
http://www.geocities.com/hrowson/index.htm
MAJOR IMPROVEMENTS: This version includes a Windows Form Designer which greatly helps in creating your application's user interfaces. This designer is available in C# IDE Mobile via the menu "Tools/UserPlugin/ControlEditor" (and therefore works directly on the PPC). This greatly reduces the amount of written code for the application and allows getting a GUI very quickly (a few clicks)
This designer (free, like C# IDE Mobile) is developed by Jean and an introduction/presentation (although in French, but has some pictures to illustrate) is available here:
http://pagesperso-orange.fr/asnora/Control Editor/Control Editor.htm
This new version mainly adds the following improvements:
- Included new Windows Forms Designer (yes, you can a Windows Form designer usable directly on the PPC) developed by Jean (http://pagesperso-orange.fr/asnora/Control Editor/Control Editor.htm)
- Added support for compiled User Plugins (DLL instead of css)
- Added replacement File Dialog for smartphones on which the default .NET2CF FileDialog DLL is missing (this seems to be the case sometimes)
- Corrected issue with "Format document"
- Added support for user DLLs: You can now place your own CF DLLs (generated with Visual Studio for example) in the "UserDLLs" folder and call your functions within them (you can create your API for example in a native CF DLL and call these functions from your C# IDE Mobile code)
Harvey
Just some infos....
Hi,
In fact there's a translation on Jean's Web Site for the Form Designer and also I corrected a minor issue with the autatic code formatting (there was an ASSERT in there, but you just needed to say "ignore" to the debug dialog, so it doesn't really matter, the version is now V11b).
Harvey
Great tool! Thanks.
Microsoft assemblies
This is certainly a very interesting tool and probably will keep me happily busy!! But I seem to have a problem that I cannot find relative info: I'm trying to access the camera through the Microsoft.WindowsMobile.Forms.CameraCaptureDialog class, but the type cannon be resolved. I have verified that the appropriate GAC dll exists in the Windows directory. I cannot find the class/assembly in the MS.NETCF index either.
Any hints?
Thank you!
ps. I'm on a kaiser with CF 3.5 and Schap's WM6.1 Beta Rom.
nicely done sir
Hi,
Sorry, I've only just seen the post about Microsoft.WindowsMobile.Forms.CameraCaptureDialog. As I post on a few forums I don't always see answers that come a long time after the posts, that's why I leave my email easily accessible on the web site... don't worry about emailing me, I'm not planning on building a "spam" database...
I'll look quickly, there's also a similar problem with DataGrid it seems. I think these are both the same problem and should be sorted out quite easily.
Harvey

Pre-compiled TodayScreenSupport-UnManaged?

I'm trying to follow these instructions for creating a Today Screen Plugin, but I can't compile the unmanaged code. I can't even get eVC to run on my Vista machine, and I don't know enough about c++ to manually convert it to a VS.NET 2008 project.
Is there a reason that I have to compile it myself? Is there somewhere I could download a "pre-compiled" version without having to struggle through this?
I managed to get the eVC++ projects imported into VS.NET 2008 and built, hooray!.
Next I opened the "Managed" solution that is supposed to build the cab files for the device and an installer for my dev box. With some tweaking of paths, I was able to get this to build too.
However, it looks like it's building a new project type for vs.net2003, not 2005. So installing the custom project doesn't actually seem to work. And I still can't actually start working on what I *REALLY* want to do, which is writing a today screen plugin.
So now I have to figure out how to make this project type compatible with vs.net 2008.
What a convoluted and weird way to distribute this stuff. Why didn't they just distribute some binaries?
You could try memwatcher project from WM5 SDK which came with Visual Studio 2008 or to convert the project from WM6 SDK that is created for VS2005. The example shows free memory (SD card and RAM) and is useful as starting point for new projects in VC++ (unmanaged).
MemWatcher is written to support different screen sizes and orientation by calculating the size of bars according the device screen size.
Read more about Memory Watcher here:
http://msdn.microsoft.com/en-us/library/bb158711.aspx
I had no problems with these examples and created simple today screen for my needs with added to RAM/SD bars a battery level and large clock with date.
Thank you for the suggestion, but my C++ skills are negligible. I tried briefly to figure out how to write my own based on those samples, but since I don't even know string manipulation it was very much an uphill battle.
Later I found this, which allowed me to write something useable in C#. It's still alpha, but it seems to be stable. And it let me get on with the fun part of developing instead of trying to figure out linkers and static libraries.

[LIBRARIES][SOURCE] WP8 Native Access project

This thread is for announcements and discussion around the WP8NativeAccess project (https://wp8nativeaccess.codeplex.com/). The purpose of this project is to provide general-purpose libraries, usable from C++ or .NET, which enable access to the underlying functions of the OS. In some cases, this will mean simple wrappers around native APIs; in other cases, these will be more advanced operations which simplify using the low-level APIs.
Some of the functions that the Native Access project exposes are already available via the official APIs. Other functions, however, are not. While I have no objection to these libraries being used in Store apps (license permitting), it is unlikely that Microsoft will permit the ones which use unofficial APIs.
Note that this library does not provide any method for elevation of privileges. Consequently, the use of these APIs will be constrained by the sandbox in which all third-party WP8 apps run, as defined by the capabilities in the app manifest. In practical terms, this means that most of the system will be either inaccessible or read-only. Even so, it has already proven useful to myself. When combined with interop-unlock and Capability-unlock hacks (making it possible for apps to obtain higher privileges), these APIs become much more useful. In fact, the EnableAllCapabilities utility uses the Registry library. Similarly, if you have the ability to use restricted Capabilities in an app you are developing, you may find these libraries useful.
The libraries are as follows:
FileSystem version 0.4.0: Implements functionality to read, write, and get information about files and directories, plus supports creating symbolic links and enumerating file system volumes. This version contains a breaking change from 0.3.x: the NativeFileSystem functions are now static and the constructor is removed. This library may be built with or without the macro USE_NON_PUBLIC_APIS; by default it now includes this macro and require kernelbase.lib to build. If this macro is not defined, it builds using the public APIs without requiring any special libraries.
Registry version 0.2.9: Implements functionality to read and write registry values, and to create and delete registry keys and values. Many, though not yet all, registry value types are fully supported. This library consists entirely of non-public (for WP8) APIs and requires the KERNELBASE.LIB and ADVAPI32LEGACY.LIB export libraries for Windows Phone 8 in order to build (the DLLs are in C:\Windows\System32 on the phone; you can use Dll2Lib.exe to extract the .LIB files).
Processes version 0.1.0: Implements basic functionality to get information about your process, and to create or kill a child process. Very early version.
They are licensed under the Microsoft Permissive License.
The FileSystem and Registry libraries are currently being used by my WP8 File Access Webserver project (http://forum.xda-developers.com/showthread.php?t=2355034).
My EnableAllSideloading app uses the Registry library (http://forum.xda-developers.com/showthread.php?t=2435697).
@hjc4869 has a basic FileExplorer app which uses the FileSystem library (http://forum.xda-developers.com/showthread.php?t=2497788).
You may need to use 7-Zip or another extraction program better than the built-in Windows Zip extractor to open the archive.
Reserved for OP...
Updated. This will be the main place on XDA for releases of the NativeAccess libraries going forward. Additionally, please report problems or make feature requests here.
I think there should be some way to list all the volumes...
Perhaps windows runtime has provided an async win32 file API wrapper which has the same ability as win32 ones ,so I think undocumented file API and registry ,process and etc are more important.
The latest version of the NativeFileSystem library can give you the mount points (as strings) for all volumes (C:\, D:\, etc.)... I implemented that a few days ago; it should be in this update. Sorry for not highlighting that more clearly (typo in the OP fixed now).
Can't open "NativeAccessLibraries_040_029_010.zip"
Edit Ok with 7-zip
How odd, you're right. I didn't do anything terribly fancy while building that ZIP, so I really don't know what's up with that.
I have added the NativeFileSystem library to my PDF to Office app...
Thanks again for all your work !
@GoodDayToDie: Congratulations, good work! Unfortunately I can't import the registry library, it says it's not a valid DLL. I have Visual Studio 2013 Pro. Does it work for WP8? Please help me solving the problem. Thanks!
Sent from my Windows Phone using Tapatalk
myst02 said:
@GoodDayToDie: Congratulations, good work! Unfortunately I can't import the registry library, it says it's not a valid DLL. I have Visual Studio 2013 Pro. Does it work for WP8? Please help me solving the problem. Thanks!
Sent from my Windows Phone using Tapatalk
Click to expand...
Click to collapse
You need to reference .winmd file, not the .dll file.
Thanks! Can we also modify hex registry values with it?
Sent from my Windows Phone using Tapatalk
If you have the required permissions, yes. There's read/write functions for REG_BINARY, and also a simple wrapper around RegSetValue that will work for any type.
However, the library doesn't actually give you any privileges your app didn't already have. Without special Capabilities (which usually require hacks to enable), you won't have write access anywhere in the registry at all...
GoodDayToDie said:
If you have the required permissions, yes. There's read/write functions for REG_BINARY, and also a simple wrapper around RegSetValue that will work for any type.
However, the library doesn't actually give you any privileges your app didn't already have. Without special Capabilities (which usually require hacks to enable), you won't have write access anywhere in the registry at all...
Click to expand...
Click to collapse
OK, thanks, but another question: I referenced .winmd file, but it gives me error, the component was not found. Any idea how to fix it?
Do you have the DLL and the WINMD in the same location? Are you creating a WP8.0 app (I don't know if apps targeting 8.1 specifically will work)? Are you building for ARM?
Yeah, I have. Library now working, but it doesn't recognize the commands, I mean if I write NativeRegistry.ReadDWORD command not found :/ Can you help me?
Sent from my RM-915_lta_lta_330 using Tapatalk
You're going to need to be way more specific.
How far did you get, i.e. can you compile the app? Install the app? Launch the app? Does it crash immediately or does it actually load? Etc.
What, *exactly*, breaks? Does it break when you try to reference the NativeRegistry library, or only when you try to actually use ReadDWORD function, or some time later? If you are able to call readDWORD, what is the return value? If it fails, what is the error code?
Are you getting an exception, or does it just not work? If it's an exception, give me as much detail about it as you can (the type, the message, the code where it happened, etc. if possible).
myst02 said:
Yeah, I have. Library now working, but it doesn't recognize the commands, I mean if I write NativeRegistry.ReadDWORD command not found :/ Can you help me?
Sent from my RM-915_lta_lta_330 using Tapatalk
Click to expand...
Click to collapse
Try to rebuild the solution.
GoodDayToDie said:
You're going to need to be way more specific.
How far did you get, i.e. can you compile the app? Install the app? Launch the app? Does it crash immediately or does it actually load? Etc.
What, *exactly*, breaks? Does it break when you try to reference the NativeRegistry library, or only when you try to actually use ReadDWORD function, or some time later? If you are able to call readDWORD, what is the return value? If it fails, what is the error code?
Are you getting an exception, or does it just not work? If it's an exception, give me as much detail about it as you can (the type, the message, the code where it happened, etc. if possible).
Click to expand...
Click to collapse
Hi, I can't even build it, it doesn't recognize the command and makes a red line under it. I can reference the library, but not use any commands like ReadDWORD, WriteDWORD and so on. Screenshot is attached, this is happening if I load your EnableAllSideloading App, for example. With self-created projects I have the same problem. My system is Win 8.1 Pro x64 and I'm using Visual Studio 2013 Professional. Can you help me? Thanks!
You have added
Registry.winmd in reference library
and
Using Registry;
in your source code
Source code for EnableAllSideloading already has the requisite using directives...
When you look in the project's References, is the Registry library referenced correctly? By default it'll try to use a relative path that I use on my PC, but probably not the same path you use. You may need to manually adjust the reference, or delete it and re-create it.
Alternatively, what auto-fix options does Visual Studio give you when you click on those red lines?

Categories

Resources