Hello,
I am trying to draw a simple rectangle in Direct2D since GDI is no longer used with Xojo. The following code. I wasn’t able to find an example in Xojo with Google to draw with Direct2D so I am trying some code.
There is an Example in C++ that I would like to draw by using declares: Direct2D Quickstart for Windows 8
There are two parts of code that I am just starting with:
Sub Action() Handles Action
//Create a Direct2D factory
Dim pD2DFactory as New MemoryBlock(8)
Dim hr as Integer = 1
hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, pD2DFactory)
If hr = 0 then
System.DebugLog "D2D1CreateFactory success"
Else
System.DebugLog "D2D1CreateFactory error:" + hr.ToText
End If
End Sub
The above starts to create a new ID2D1Factory. The method is overloaded and I think I have the right one - maybe not 
Here is the declare code:
Public Function D2D1CreateFactory(factorytype as UInt32, ppIFactory as Ptr) as Integer
#If TargetWindows
//https://docs.microsoft.com/en-us/windows/desktop/api/d2d1/nf-d2d1-d2d1createfactory
Dim hResult as Integer
Declare Function D2D1CreateFactory Lib "D2d1.dll" (factorytype as Integer, ppIFactory as Ptr) as Integer
If System.IsFunctionAvailable("D2D1CreateFactory","D2d1.dll") then
Return D2D1CreateFactory(factorytype, ppIFactory)
Else
System.DebugLog "Error calling D2D1CreateFactory"
End if
#Endif
End Function
The program doesn’t call an error, and GetLastError doesn’t show anything and the IDE just shuts down. After a couple of days with this code, I am no further ahead. Does anyone have some helpful suggestions?
https://www.dropbox.com/s/700epl686afoln1/OutlineText.xojo_binary_project?dl=1
Just something I put together for someone on the forum.
However, just a quick look at at D2D1CreateFactory, it takes 4 params and you’re only giving it 2 ?
I’ve not taken a super in depth look at D2D yet as I don’t believe Xojo has taken the right path in their implementation, I’m in two mind about arguing against how its been done.
Oh you’re using the one from here: https://docs.microsoft.com/en-us/windows/desktop/direct2d/createfactory-lt-factory-gt--d2d1-factory-type---factory-
Thats as ptr to a ptr so you need in the delare ByRef
Let me have a tinker a mo.
LOL, I love this forum </sarcasm off>. I just wrote a response and it showed two versions - and I deleted one of the duplicate responses and the forum deleted both responses… lol…
Hehe yeah
I see that and I always refresh the page before I do anything
Here is a link to the program that was modified to a pointer with ByRef:
Example1
I was also hunting for datatype conversions that are similar to your helpful C++ to Xojo datatype declares, and hadn’t found one yet. I randomly tried a few different datatypes and this didn’t help either - but I was just guessing.
I just use my reformatcode script to do the conversions these days, same difference, just quicker. C++ enums are Int32 thats the only thing I need to add to my list to get that code going.
oops, grab it again, fixed that enum typo after changing it from the const I was temporarily using.
Wow, that was fast Julian - and Thank you.
I am going to dig into this some more and see what you did. I see that a COM is referenced which piques my interest.
Thanks again!
No probs. Just glancing over it, I think it’ll be a bit of a slog but it should be doable.
If you get stuck with it, take a look at this https://blog.xojo.com/2016/03/02/how-to-recursively-delete-a-folder/ and https://www.dropbox.com/s/uzw7qutc5iceten/DisableTouchWhenFullscreen.xojo_binary_project?dl=1 if you can understand those then you’re on the right path.