I am using C# and Visual Studio 2008.
I have a class that will turn on the scanner of my Windows Mobile Device and then will capture the read of the scanner when pressed. It will also shut down appropriately and cleanly. I am using a vendor provided SDK to do a lot of the heavy lifting.
I have this working correctly in a Mobile App, but I also need the dll to be able to be called via COM/ActiveX from a web site. I have been going around and around about how to do this. I've bounced between various settings and project types. I've tried converting it over to C++ and ATL. But so far nothing works.
I get conflicting information depending upon where I look. I need help. Can only C++ do this? Is there something I'm missing? I can't be the only person needing to do this. How can I do this?
You cannot create ActiveX/COM components in managed code with the Compact Framework. There is not EE Hosting support, so it simply cannot be done. You will have to write this in C++ (not managed C++, but old-fashioned native).
As a side note that is sometimes overlooked on COM controls, you also have to implement IObjectSafety for the control to work in a browser.
Related
I'm trying to do face tracking apps in Windows 8 app. And I aware that in order to access the camera stream, I have to use MediaCapture.AddEffectAsync() which has to be done incorporate with C++ as shown in this sample.
Now I'm able to access the stream and track the face, but I'm not able to pass/return the tracking face coordinate to C# for further processing.
One way I've tried is to invoke C# method in C++ to pass back the tracking coordinate. But no avail, because Visual Studio doesn't allow circular dependencies between projects.
Another way is to constantly pull the data from C++, but this is not what I want.
Maybe there is another more straight forward way to access the camera buffer, I would like to know.
So my question is, how to get back the tracking coordinate? Or What is the right way to do it? Thanks!
To overcome this, we simply setup TCP/IP localhost connection between C++ DLL and C# code. That is, we let C# become server, and C++ DLL become client. Whenever C++ DLL wants to talk with C#, C++ merely pass the data to C# through TCP/IP socket. Currently, Windows 8 doeesn't place restriction on TCP/IP communication within same process.
A good starting reference is StreamSocket sample
This is not a best way, and it is having slightly performance pernalty as the data need to go through TCP/IP layer. But, so far, perhaps this is the best we can have, unless Microsoft breaks the barrier.
I wrote an application in a JS-based framework called Titanium. This framework doesn't have some functions, so I'm bundling autohotkeys, and using STDIN/STDOUT to connect the two. Autohotkeys has a cool function DllCall which allows to interconect with the operating system and should help me close the gap between the JS-based framework and the missing functionality.
To give you an example, Titanium allows me to bind to a specific port. But if I bind to 0 and let the OS pick a free port (as it should), it will work, but there's no way to tell which port it actually bound to.
Now since I come from web applications, DLLs are new to me; so I have a few questions:
Is there like a big doc with all the DLLs and all their methods?
How do I know if some methods are dependent on some services? I mean I've heard some rely on RPCs, COM, COM+, WMIs, etc. which a user can turn off and if it does, these methods won't work. Is there also a place where I can get more info on this?
Are there any off-the-shelf DLLs, with their methods, which I can trust that they will work 100% from XP up to 7?
Are there any access permissions I should know about? Are they documented.
If you also come from web programming, is there anything else I should be aware about?
Thank you very much.
You can find a (mostly) complete documentation of all Windows API functions (which reside in DLLs) either online on MSDN or offline using the documentation from the Windows SDK.
For example look at the documentation for SHGetSpecialFolderPath. There you can find various information, like the DLL (shell32.dll), any prerequisites (min. IE 4) and the platform availablity. (min. Windows 2000) Also security considerations are documented.
All API functions are documented more or less in this manner. A good starting point is the Windows Developer Reference. From there you can browse through the many API functions.
Basically the answer to every question is that you should search MSDN for the functions or APIs you are interested in and read the documentation there:
http://msdn.microsoft.com/en-us/library/ms123401.aspx
They document which operating systems the functions are available in so it should be easy to write something that works in Windows XP and up.
All Metro applications must be inspected before distribution through Windows 8 AppStore. Does this mean it will not be allowed to use code obfuscation? Or it is still possible, and only some specific aspects are going to be monitored during such inspection?
Here are some facts:
Marketplace for WP7 allows C# apps be obfuscated (even MS he advises
doing so) and I don't see any reason why Windows AppStore would ban
such apps.
It is almost certain that some vendors will provide compatible C++
obfuscator.
You should care about your clients not crackers. :)
a lot of hacks for code obfuscation will be banned.
Remember, if you have some logic that you want to hide, make a webservice and consume it in your client app. Better spend your time building better app, fixing bugs etc.
No dice, if someone has access to the binaries is just a matter of time when someone cracks it.
This is an armchair answer with some things that come to mind:
Even a C++ application can still be anazlyed if it depends on dynamic linking to a runtime or API, which is the case with WinRT applications. Microsoft approval can in theory include automated or human guided testing of your app using a special sandbox and/or OS hooks capable of detecting if your application attempts certain prohibited operations.
Under the hood, C++ apps for WinRT are more like native C++ apps than C++/CLI, so obfuscation is not needed to the degree that it is for C#, all things being equal.
You can still build C# apps that target WinRT, but your code will still be compiled to CIL and run within the CLR (more or less), invoking WinRT through wrappers that Microsoft provides. Because it's CIL, the question of obfuscation should be equivalent to that of C#/.NET obfuscation in general.
Obfuscation is still possible for WinRT. The inspection made by the Application Certification Kit cover lot of aspects including metadata and IL verification. Just like the old peverify did.
I have an application that is written in VB.NET, using the System.Windows.Forms.Form as the front-end GUI.
It runs perfectly on my Windows machine however recently there is a business requirement to convert this application to run as a web application so that people could view them in their blackberries when they go to the URL.
Is there any quick way to perform such a conversion or I will have to translate the code line-by-line for such cases?
Any help is appreciated!
Thanks!
Is there any quick way to perform such a conversion
No, not that meets your requirements. You can build custom winforms controls that can be hosted in internet explorer, but that won't help users accessing your app from a blackberry.
will I have to translate the code line-by-line for such cases?
No, it's much worse than that. Many of the things you do in a Winforms app just won't translate to the web well. You'll have to re-write and re-think a lot of your existing code. Essentially, you're not only re-building the app from from scratch, but you're doing it for a platform with which you have no prior experience. In other words, it might even take longer than building the original.
I know it's not what you were hoping to hear, but thems the breaks.
I have a interesting problem: Where I work we've built a home-grown ERP system in VB6 that we are slowly moving over into vb.net. There are some projects have are in .net: we have a hand-held C# project that uses a web service to talk to our database, I've built some reporting screens using Crystal and some smaller maintenance screens.
Well as we have been plotting the conversion out, we want to have a way to separate our business logic and UI so that the UI can be a win/web form or a Smart Device project. Is this even possible? I try to reference the DLL in a test I have and it gives me this error when trying to debug using a emulator
Deployment and/or registration failed with error: 0x8973190e. Error writing file '%csidl_program_files%\smartdeviceproject1\system.windows.forms.dll'. Error 0x80070070: There is not enough space on the disk.
I'm not sure what it's doing... I take my DLL out and it works fine. Does anyone know of a way I can create a DLL that can target all of these UI without may changes?
This post here
helped me alot. Using a linked projects with conditional complation would seem to work in my case.