[DLL] SciLor's HD2/Leo Multitouch .NET CF DLL - Windows Mobile Software Development
Hello, XDA's
Due to the discovered HD2 Multitouch captilities I have developed a .net cf dll for easy use.
It converts the Multitouch events to normal Mouse events
SciLor's .NET CF MultiTouch DLL v0.1 adds MultiTouch-Support to your existing .NET CF software very easily (Currently only for the HD2):
If I release a new DLL, it WILL be fully compatible to the previous one!
First of all you will have to add your app to the PinchToZoom Whitelist in the registry:
Code:
[HKEY_LOCAL_MACHINE\Software\HTC\TouchGL\Pinch\WhiteList\YourApp]
"ProcName"="YouAppProcessName.exe"
After adding, soft reset!
Then add the "SciLors-MultiTouch.dll" as reference in your Visual Studio project. Beware, it is not allowed to change the assembly name! It must stay "SciLors-MultiTouch.dll" or it will not work!
Afterwards declare the MultiTouch Class:
VB.NET:
Code:
Dim myMultiTouch As New SciLorsMultiTouch.SciLorsMultiTouch
C#:
Code:
SciLorsMultiTouch.SciLorsMultiTouch myMultiTouch = new SciLorsMultiTouch.SciLorsMultiTouch();
Then you add following to your Form_Load event:
VB.NET:
Code:
Call myMultiTouch.CatchWndProc(Me)
AddHandler myMultiTouch.MouseDown, AddressOf frmMain_MouseDown
AddHandler myMultiTouch.MouseMove, AddressOf frmMain_MouseMove
AddHandler myMultiTouch.MouseUp, AddressOf frmMain_MouseUp
C#:
Code:
myMultiTouch.CatchWndProc(this);
myMultiTouch.MouseDown += frmMain_MouseDown;
myMultiTouch.MouseMove += frmMain_MouseMove;
myMultiTouch.MouseUp += frmMain_MouseUp;
Now, at every MultiTouch Event it gets delegated to your frmMain_Mouse* procedures (There will be always 2 Events fired due to there existing 2 Fingers on the screen ). You can easily detect wheather the mouse event comes from a normal mouse-press or a multitouch finger.
Code:
Single Finger:
Windows.Forms.MouseButtons.None or MouseButton = Windows.Forms.MouseButtons.Left
MultiTouch:
Finger 1: Windows.Forms.MouseButtons.Middle
Finger 2: Windows.Forms.MouseButtons.Right
Code Examples:
VB.NET:
Code:
Public Structure MouseState
Dim Position As Point
Dim MouseDown As Boolean
End Structure
Public Fingers(2) As MouseState
Public Sub frmMain_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles frmMain.MouseDown
Dim ButtonID As Byte = ButtonToID(e.Button)
With Fingers(ButtonID)
.Position.X = e.X
.Position.Y = e.Y
.MouseDown = True
End With
End Sub
Public Sub frmMain_MouseMoveByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles frmMain.MouseMove
Dim ButtonID As Byte = ButtonToID(e.Button)
With Fingers(ButtonID)
.Position.X = e.X
.Position.Y = e.Y
.MouseDown = True
End With
End Sub
Public Sub frmMain_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles frmMain.MouseUp
Dim ButtonID As Byte = ButtonToID(e.Button)
With Fingers(ButtonID)
.Position.X = e.X
.Position.Y = e.Y
.MouseDown = False
End With
End Sub
Private Function ButtonToID(ByVal MouseButton As MouseButtons)
If MouseButton = Windows.Forms.MouseButtons.None Or MouseButton = Windows.Forms.MouseButtons.Left Then
Return 0
ElseIf MouseButton = Windows.Forms.MouseButtons.Middle Then
Return 1
Else
Return 2
End If
End Function
C#:
Code:
public struct MouseState
{
public Point Position;
public bool MouseDown;
}
public MouseState[] Fingers = new MouseState[3];
public void pctDraw_MouseDown(object sender, MouseEventArgs e)
{
int ButtonID = Conversions.ToByte(this.ButtonToID(e.Button));
this.Fingers[ButtonID].Position.X = e.X;
this.Fingers[ButtonID].Position.Y = e.Y;
this.Fingers[ButtonID].MouseDown = true;
}
public void pctDraw_MouseMove(object sender, MouseEventArgs e)
{
int ButtonID = Conversions.ToByte(this.ButtonToID(e.Button));
this.Fingers[ButtonID].Position.X = e.X;
this.Fingers[ButtonID].Position.Y = e.Y;
this.Fingers[ButtonID].MouseDown = true;
}
public void pctDraw_MouseUp(object sender, MouseEventArgs e)
{
int ButtonID = Conversions.ToByte(this.ButtonToID(e.Button));
this.Fingers[ButtonID].Position.X = e.X;
this.Fingers[ButtonID].Position.Y = e.Y;
this.Fingers[ButtonID].MouseDown = false;
}
private object ButtonToID(MouseButtons MouseButton)
{
if ((MouseButton == MouseButtons.None) | (MouseButton == MouseButtons.Left))
{
return 0;
}
if (MouseButton == MouseButtons.Middle)
{
return 1;
}
return 2;
}
-Multiple Instances are not supported and not needed (Multitouch events fire allways, everywhere on the form)!
-The Mouse-Coordinates are allways relative to the forms top-left corner.
Download at:
http://www.scilor.com/hd2-leo-dotNetCfMultiTouchDLL.html
Exelent work you've done here mate, keep it up.
I will update this to the best Multitouch solution I find
The dll will kept compatible to the previous versions so, if the author of a software forgets to update to the best DLL you can do it manually
rofl author is newb,
dev need no external dlls to realize double touch.
Its called............. gestures.
Download Winmo 6.5 sdk for gesture.h and lib.
Gesture GID_DOUBLESELECT implement two finger tracking on screen.
So..... lets waiting Windows Mobile 7 sdk for pure multitouch support
iperov said:
rofl author is newb,
dev need no external dlls to realize double touch.
Its called............. gestures.
Download Winmo 6.5 sdk for gesture.h and lib.
Gesture GID_DOUBLESELECT implement two finger tracking on screen.
So..... lets waiting Windows Mobile 7 sdk for pure multitouch support
Click to expand...
Click to collapse
First of all you are the newb
According to http://msdn.microsoft.com/en-us/library/ee207148.aspx the GID_DOUBLESELECT is just for a double tap.
A double tap represents the left double click of a mouse.
The application receives a GID_DOUBLESELECT gesture message when the finger–up events occur in a defined time period and within a specific distance of each other.
Click to expand...
Click to collapse
And has nothing to do with multitouch finger tracking
The dll should easily extent any .net program with a multitouch fingertracking very easily.
GID_ZOOM 3 The zoom gesture.
http://msdn.microsoft.com/en-us/library/dd940543(VS.85).aspx
iperov said:
GID_ZOOM 3 The zoom gesture.
http://msdn.microsoft.com/en-us/library/dd940543(VS.85).aspx
Click to expand...
Click to collapse
This is for Window 7
Man please read before thinking knowing more
Very nice, Scilor. I'll try it in my cover browser app that I am working on
Just a question, how do you handle the absence of HTC dll ? In my case I am making a generic application with enhanced functionality for HD2.
so how enable multitouch without white-listing? i think HTC driver quering some interfaces, and translate double touch as windows messages to foregroung active window, if parent process is white-listed?
iperov said:
so how enable multitouch without white-listing? i think HTC driver quering some interfaces, and translate double touch as windows messages to foregroung active window, if parent process is white-listed?
Click to expand...
Click to collapse
lolololol, you totally got owned, and you completely deserved it for trying to call someone out in a really douchebag way when you actually had no clue what you were talking about. Nice job trying to save face and be diplomatic NOW though...
SciLor, keep up the good work this is awesome
iperov said:
rofl author is newb,
dev need no external dlls to realize double touch.
Its called............. gestures.
Download Winmo 6.5 sdk for gesture.h and lib.
Gesture GID_DOUBLESELECT implement two finger tracking on screen.
So..... lets waiting Windows Mobile 7 sdk for pure multitouch support
Click to expand...
Click to collapse
P.S. are you still "rofl"? Cuz I am!
better, get touch.dll and implement multitouch support
Yes, hack it in, very nice
If I would do that, the attack point is the "TouchGL.dll" I have already discovered the important functions...
Yup.
Try deblock checkings in Touch.dll wich will loading PenTrac.dll,
PenTrac.dll this will be ur driver.
Then define func gMultipointHook, and log it.
or
hook gMultipointHook in TouchGL
people waiting...
I already tried to hook a dll over .net but there seems to be impossible.
I have to stick to c++, but due to I am not very familiar with it, I will need much more time
So, is there any progress?
I'm still looking for a way to get two independant touch inputs, not just pinch to zoom
I'm counting on you!
VanKurt said:
So, is there any progress?
I'm still looking for a way to get two independant touch inputs, not just pinch to zoom
I'm counting on you!
Click to expand...
Click to collapse
I am tryimg to fimd a better way for real multittoich
By the way: why isn't HTC publishing a powerfull and easy to use Multitouch SDK?
I think it would be in there own interest to have as many developers out there create cool games and apps using this technology. That would be a great advertisement for the HD2...
And since they have all the code at their hands it wouldn't be too much work either.
ARGH, how I hate this. On all other plattforms (iPhone, Android) EVERY feature of the phone (from Multitouch, GSensor, GPS etc.) is easily accessible and well documented...
VanKurt said:
By the way: why isn't HTC publishing a powerfull and easy to use Multitouch SDK?
I think it would be in there own interest to have as many developers out there create cool games and apps using this technology. That would be a great advertisement for the HD2...
And since they have all the code at their hands it wouldn't be too much work either.
ARGH, how I hate this. On all other plattforms (iPhone, Android) EVERY feature of the phone (from Multitouch, GSensor, GPS etc.) is easily accessible and well documented...
Click to expand...
Click to collapse
The Problem is that the "Multitouch" is implented by HTC and really hacked in...
Hi, thanks to your dll Scilor's I have began to develop an air hockey game...
If you want to test it you can download it from http://bilowlex69.free.fr/Air_Hockey_D2.CAB
This is only a beta version for the moment because there is only multiplayer functions.
Related
In Which Language You Develop For WM?
For Windows Mobile, I develop in C# amd Pascal, but which language you use?
I use C++, faster (loading if not at run time) less memory overheads, and lets you do more...
I use C++ only for Linux development PS: Why you haven't voted?
Some have voted for Other and haven't posted which is the language, then please post to share for the others
i use c#, and it's not simple at all, this thing can do dirty things!
anaadoul said: I use C#, and it's not simple at all Click to expand... Click to collapse Here is an example of it: C# For Windows: Code: string path = @"c:\temp\MyTest.txt"; File.ReadAllText(path); On Windows Mobile C#: Code: static string ReadAllText(string path) { using (var r = new StreamReader(path)) { return r.ReadToEnd(); } } All because .Net Compact Framework don't recognize File.ReadAllText and the other File.*.
I have actually voted for three of of the above. For the following reasons :- C Used for Win32 model apps. C++ MFC Apps C# .NET apps All three are suberb in their own right, but glow brighter in their own area. Pick the one that works for you, and for what you are trying to do in the first place.
Very good technologys
NETCF GetTextExtentExPointW missing
Hi to all Guys, I Was developing a custom textbox and I had the necessity to measure the string's width, so I try to define GetTextExtentPoint32 for NETCF, but I didn't find it. After investigating on Google I found that on NETCF the right function would be GetTextExtentExPointW. Some people say GetTextExtentExPoint some say GetTextExtentExPoint , others say GetTextExtentPointW. I Tried all these names without results and when I launch the program on the device I get err message "NotSupportedException". Now my current try is : [DllImport("coredll.dll")] static public extern int GetTextExtentExPointW(IntPtr DC, string Str, int Len, int nMaxExtent, ref int[] lpnFit, int[] alpDx, out SIZE size); Could any one say what is the right name if one is there ? My device is acer neo S200 with WM6.5 but NETCF 2.0 SP2. Could also anyone say how to get a list of the coredll.dll functions. Stated that I use sharpdevelop 2.2.1and not VS. Thanks to all Joss
SetPowerRequirement for accelerometers
Hi! My application uses the accelerometer in unattended mode, which requires me to set a power requirement on the hardware. Since I own a couple of HTC devices it was easy to figure out what I needed for those: SetPowerRequirement("ecs1:", D0, POWER_NAME | POWER_FORCE, null, 0); Where ecs1 is built up from the following registry keys: HKLM\Drivers\BuiltIn\GSensor\Prefix HKLM\Drivers\BuiltIn\GSensor\Index But since I'm using the Windows Mobile Unified Sensor API (http://sensorapi.codeplex.com/), which supports both Samsung and HTC devices I have no idea what the G-sensor driver is named on Samsung devices. Does anyone know this or could help me figure it out? (I can send a test application). Its most likely a key in HKLM\Drivers\BuiltIn\ that contains the Prefix and Index values. In the Unified Sensor API they use CreateFile() on "ACS1:", so it might be a key in HKLM\Drivers\BuiltIn\ that contains the Prefix ACS and Index 1. Thanks in advance.
To cover all Samsung devices you need to use ACC1: and ACS1: (depends on device), so just SetPowerRequirement on all 3 (ACC1, ACS1 and ECS1). There may be some issue with original Omnia 1 device, but others should work.
Directdraw and Alphablend???
I try to create transparent surface using directdraw but it don't work... I create my surface like this : Code: DDSURFACEDESC ddsd; memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT; ddsd.dwWidth = im.Width; ddsd.dwHeight = im.Height; ddsd.ddpfPixelFormat.dwSize = sizeof(ddsd.ddpfPixelFormat); ddsd.ddpfPixelFormat.dwFlags=ddsd.ddpfPixelFormat.dwFlags|DDPF_ALPHAPIXELS|DDPF_RGB; ddsd.ddpfPixelFormat.dwAlphaBitDepth=8; ddsd.ddpfPixelFormat.dwRGBBitCount=32;//with alpha ! ddsd.ddpfPixelFormat.dwRGBAlphaBitMask =0xFF000000; ddsd.ddpfPixelFormat.dwRBitMask =0x00FF0000; ddsd.ddpfPixelFormat.dwGBitMask =0x0000FF00; ddsd.ddpfPixelFormat.dwBBitMask =0x000000FF; HRESULT hRet =ldDDraw->CreateSurface(&ddsd, &out, NULL ); But when I use AlphaBlt, alpha chanel is not used What's wrong with my code ?
Hey I couldn't help you with your DirectDraw code. But have you tried to develop you're apps with OpenGl ES. I think it's much better than using any MobileDirectX-feature 'cause Direct3D (and I think so: also DirectDraw) are just wrappers around OpenGL ES. So if you have some experiences with 3D-coding (or 2D with DirectDraw or OpenGl for Desktops) on desktops you won't get any problems with OpenGL ES - even with managed code! Here are some nice tutorials to getting started with OpenGl ES: zeuscmd.com/tutorials/opengles/index.php Chabun
Thank's for your reply! I will think about it because Microsoft does not seem to have implemented this feature, despite what MSDN say... But Direct3D and DirectDraw are not "just wrappers around OpenGL ES", they are two different API! Furthermore, my software must be compatible with old mobile and I don't know if OpenGL was supported on these devices...
transparency in C#.net with GDI What language are you coding in? I've been using C#.net for awhile and I use the GDI. The way I made transparency work was by drawing the background to a aux layer, the item I wanted to be transparent onto that aux layer "both items are solid at this point", then I used an API already on the phone "I can't recall what it is at the moment, I'm not at my normal pc now". The API would draw the aux layer to the offscreen buffer at a pre-determined transparency amount which already has the background. This would create the transparent effect. If your doing a 3d environment with a lot of detail, the technique could also work....it would just contain many processes till the effect is completed. :-D
I use the Imaging library to paint my PNG with alpha channel, but it's very slow... I'm coding in C++, but if you was able to do alpha blitting with directdraw in C# it can maybe done in the same way in C++.
Thoughts on Unlocking custom GPU programs...
Hey, Currently I've been working on a game for the Windows Phone but a couple things have really irritated me during porting, one of which is they don't allow custom GPU programs...which is very stupid considering there basiceffect class is completely useless. The Windows Phone has some awesome hardware and it sucks that its being restricted by the dev team. So right now I'm looking at microsoft.xna.framework.graphics in reflector(the GAC version not the reference version). The effect class itself is NOT marked as security critical, but the constructor is(because it requires compiled GPU bytecode to be passed down), so the logical why would be to load it via the contentmanager, but the damn thing spits out("You are unable to compile custom effects for winphone7). My question is does anyone know where that error is actually located? It looks like XNA is using a custom content importer to import some kind of template called "BasicEffectReader" , and "BuiltInEffectReader" . I don't know if I'm allowed to post reflected code on here, but if you open up BasicEffectReader.cs youll find that it creates a "cloned effect" from the BuiltInEffectReader. My other questions are, is the bytecode for Windows Phone 7 different from the 360/Windows(I'd assume so), and if so is XNA actually compiling bytecode on the fly, is it using a template for basiceffect? If it is requires its own bytecode, what kind of methods do you guys think would be feasible to be able to create custom effects? The graphics card on the phone should follow the DX9 specs, unless its a 9.5 hybrid like the 360. EDIT3: Alright it looks like if you compile it on another platform, strip out the contentmanager stuff at the start of the file, it will load(passes all the header checks) but it fails because UnsafeNativeMethods.Effect.GetGlobal(graphicsDevice).CreateEffect(pEffectCode, ((uint) effectCode.Length) - num2, graphicsDevice.pComPtr, out effect_desc); returns a invalid handle...
Very surprised they don't let you use custom GPU shader programs.
Yeah I know :/ anyway I kind of got a custom program loaded, but I'm not sure about the OpCodes, so I don't know how to customize it yet. _effect = new Effect(device, Code); static byte[] Code = new byte[] { 0xcf, 11, 240, 0xbc, 12, 0, 0, 0, 0, 0, 0, 0, 1, 9, 0xff, 0xfe, 0x62, 0x61, 0x73, 0x69 }; Click to expand... Click to collapse First Int(4 bytes) are the XNA header magic number, Next Int(4bytes) byte offset to the code(from start of the buffer). (Offset 12) - 1, 9, 0xff, 0xfe - FX Magic Number dx9 i believe. Next 4 bytes are the IDENTIFIER for the effect. basi <-- basiceffect, skin <-- skinable effect etc. Click to expand... Click to collapse Also what version of Direct3D is the phone running? Is it a 10/11 hybrid? cause in XNAFrameworkCore.dll it references D3D11CreateDeviceAndSwapChain and it also references CreateDXGIFactory1
Has anyone got PInvoke to work? The only way to get access to the HLSL compiler for the phone is through non-exposed API's in XnaFrameworkCore.dll. When it creates the effect it looks for the unique four byte effect iden to create the shader internally(D3D_Effect_CreateHandle in XnaFrameworkCore.dll). So to get access to the HLSL compiler and compile our own effects it looks like we have to call some of the non-exported API's from the DLL. Which shouldn't be a problem if someone has found out how to get PInvoke to work( Not the COM dll hack but actually calling PInvoke. ). EDIT For anyone thats interested here are the different ID's(remember the hex is actually in reverse order): .text:1003DF68 mov eax, [ebp+var_4] .text:1003DF6B cmp eax, 69727073h .text:1003DF70 jz loc_1003E086 .text:1003DF76 cmp eax, 69736162h .text:1003DF7B jz loc_1003E05F .text:1003DF81 cmp eax, 6C617564h .text:1003DF86 jz loc_1003E038 .text:1003DF8C cmp eax, 6D766E65h .text:1003DF91 jz short loc_1003E009 .text:1003DF93 cmp eax, 6E696B73h .text:1003DF98 jz short loc_1003DFD7 .text:1003DF9A cmp eax, 74736574h .text:1003DF9F jnz loc_1003E0B5 Click to expand... Click to collapse
crozzbreed23 said: Has anyone got PInvoke to work? The only way to get access to the HLSL compiler for the phone is through non-exposed API's in XnaFrameworkCore.dll. Click to expand... Click to collapse A number of us have tried to do it, but have failed. The correct path is probably '\Windows\X.dll.' I haven't tried that yet. It's probably worth mentioning that even if you do get it working, Microsoft has sworn to reject any app that uses PInvoke.
I know the app would be rejected, I only want to build a portfolio project that I can take with me to a job interview. Even though a lot of the HLSL code is in XnaFrameworkCore.dll, there is a d3dcompiler dll(which is compiled against D3D10). I know this is probably something that has been answered before, but is there a method for opening up the WM ARM dll's in IDA? My thinking is this, we can launch executables but to get access to the OS dll's we have to build valid OS libraries. I wanted to try the COM dll method, but I don't have the phone yet and the emulator obviously won't load COM dll's. If we can get as far as calling LoadLibrary than we can call: D3D11CreateDeviceAndSwapChain and CreateFactory1 Click to expand... Click to collapse Than ASSUMING D3DCompiler.dll works(its not referenced in the XNAFrameworkCore except for loading in the HLSL sig), we can load custom GPU programs(that are HLSL based not effect based which is just fine...) as well as exposing more of the Direct3D API. The only reason why I want all the graphics API's is so I don't have to create a portfolio project with baked lightmaps with bumpmapping built in. Its such a shame that the GPU on the phone is going to waste because they designed a very restrictive effect interface :/.
Its a pain but it has been but there are lots of reason why they are doing that. for one when the chassis requirements where released the minimum requirement is that the gpu had to do opengl. xna is built for direct x and hence the problem, some stuff had to be ported to opengl for it to work properly, the problem wiht this is that the new chips now have directx gpus with them, and i am not sure but i believe none of the wp7 phones that have been released has any of the directx acceleration. Becuase of this and compatibility with the later phones (atleast up to next year) some stuff had to go, custom shaders for one. But i believe if you work close with microsoft they actually give you the the ability to create custom shader. I have not played much with xna for windows phone, just on xbox so i am not to sure what i can do and not do. But your post was enlightening and i will go back to it after i finish my few apps.
Yeah your right. I just read up that they are using the ADRENO 200 GPU(http://developer.qualcomm.com/dev/gpu/processors), which supports opengl es, and "Direct3D Mobile" whatever that means. But that still doesn't explain why they didn't allow custom GPU programs because everything is still being compiled down to bytecode. If the GPU can do per-pixel lighting it is more than capable of bump mapping that reacts to lighting which is why I really want to see if I can maybe extend one of the .net effect classes, but I still haven't figured out if that would mess with any of the internal core functions. But as I did with the XNA 360 code, I got access to the UnsafeNativeMethod classes inside the framework dll that expose all the native interfaces to the core. So basically I just skip passed all the XNA init code. The only thing that creates a problem with on the phone is that they use a "messaging service" to communicate with the framework, they build a byte[] array in the .NET code and pass it to the framework which parses it and does whatever it needs to do. On the phone, pointers aren't allowed, but I might just be able to use reflection to get the messaging code. Also I thought of something, sense the GPU supports OpenGL ES and I know that someone has been able to create a window(the FS example on Chris's site), I wonder if we create a COM dll and link against the OpenGL ES library that we can just use OpenGL rather than the "non finished" d3d api? I would try that myself but I'm not going to be able to get the phone for a couple weeks and I havent found a way to get COM dll's to work in the emulator :/
Yeah your right. I just read up that they are using the ADRENO 200 GPU(http://developer.qualcomm.com/dev/gpu/processors), which supports opengl es, and "Direct3D Mobile" whatever that means. But that still doesn't explain why they didn't allow custom GPU programs because everything is still being compiled down to bytecode. If the GPU can do per-pixel lighting it is more than capable of bump mapping that reacts to lighting which is why I really want to see if I can maybe extend one of the .net effect classes, but I still haven't figured out if that would mess with any of the internal core functions. But as I did with the XNA 360 code, I got access to the UnsafeNativeMethod classes inside the framework dll that expose all the native interfaces to the core. So basically I just skip passed all the XNA init code. The only thing that creates a problem with on the phone is that they use a "messaging service" to communicate with the framework, they build a byte[] array in the .NET code and pass it to the framework which parses it and does whatever it needs to do. On the phone, pointers aren't allowed, but I might just be able to use reflection to get the messaging code. Also I thought of something, sense the GPU supports OpenGL ES and I know that someone has been able to create a window(the FS example on Chris's site), I wonder if we create a COM dll and link against the OpenGL ES library that we can just use OpenGL rather than the "non finished" d3d api? I would try that myself but I'm not going to be able to get the phone for a couple weeks and I havent found a way to get COM dll's to work in the emulator :/
You can pretty much give up on that one, the COM dlls for the phone are ARM assembly, but the emulator runs on x86. Not likely to work.