Two Factor Authentication
Bruce Armstrong
CODE AUTHOR
Posts: 55
Bruce Armstrong replied the code: Two Factor Authentication
I have it setup as a local external function
subroutine DoDragDrop ( string Files ) library "dragdropdemo.dll"
That's not how you use a .Net assembly from PowerBuilder. Please review the original article, because it indicates how you need to do it.
Better yet, just wait for 2019 R2. An enhancement in that version will allow you to consume a .Net assembly without having to do the plumbing required through the technique I provided in that article.
subroutine DoDragDrop ( string Files ) library "dragdropdemo.dll"
That's not how you use a .Net assembly from PowerBuilder. Please review the original article, because it indicates how you need to do it.
Better yet, just wait for 2019 R2. An enhancement in that version will allow you to consume a .Net assembly without having to do the plumbing required through the technique I provided in that article.
Please Log in or Create an account to join the conversation.
Rick Domogalik
Posts: 3
Rick Domogalik replied the code: Two Factor Authentication
I was able to get the C# assembly compiled. When I call DoDragDrop() from PowerBuilder I get an error calling the external function DoDragDrop.
I have it setup as a local external function
subroutine DoDragDrop ( string Files ) library "dragdropdemo.dll"
dragdropdemo.dll is in the local directory where the program files are.
in a clicked event of a button (for test purposes)
dodragdrop( "c:\pdf\1.pdf")
On the click I get the error. "Error calling external function DoDragDrop at line 3 in clicked event of object cb_1.
Here is the C# code I am using. Pretty much the same as what you posted below. I did change DoDragandDrop to just DoDragDrop so it would match control.dodragDrop below. Not sure if this is correct, but trying it both ways lends the same error. I was able to compile this in SnapDevelop when I installed the new .NET 3.0 that just came out and reference the assembly System.Windows.Forms.
using System;
using System.Windows.Forms;
using System.Collections.Specialized;
namespace DragDropDemo
{
public class DragDrop
{
public void DoDragDrop(string filename)
{
StringCollection files = new StringCollection();
files.Add(filename);
DataObject dataObject = new DataObject();
dataObject.SetFileDropList(files);
Control control = new System.Windows.Forms.Control();
control.DoDragDrop(dataObject, System.Windows.Forms.DragDropEffects.Copy);
}
}
}
Any help would be much appreciated. Brand new to C# and the struggle is real.....
Rick
I have it setup as a local external function
subroutine DoDragDrop ( string Files ) library "dragdropdemo.dll"
dragdropdemo.dll is in the local directory where the program files are.
in a clicked event of a button (for test purposes)
dodragdrop( "c:\pdf\1.pdf")
On the click I get the error. "Error calling external function DoDragDrop at line 3 in clicked event of object cb_1.
Here is the C# code I am using. Pretty much the same as what you posted below. I did change DoDragandDrop to just DoDragDrop so it would match control.dodragDrop below. Not sure if this is correct, but trying it both ways lends the same error. I was able to compile this in SnapDevelop when I installed the new .NET 3.0 that just came out and reference the assembly System.Windows.Forms.
using System;
using System.Windows.Forms;
using System.Collections.Specialized;
namespace DragDropDemo
{
public class DragDrop
{
public void DoDragDrop(string filename)
{
StringCollection files = new StringCollection();
files.Add(filename);
DataObject dataObject = new DataObject();
dataObject.SetFileDropList(files);
Control control = new System.Windows.Forms.Control();
control.DoDragDrop(dataObject, System.Windows.Forms.DragDropEffects.Copy);
}
}
}
Any help would be much appreciated. Brand new to C# and the struggle is real.....
Rick
Please Log in or Create an account to join the conversation.
Bruce Armstrong
CODE AUTHOR
Posts: 55
Bruce Armstrong replied the code: Two Factor Authentication
Ah, need to make a correction in my last response. I forgot that the solution I provided references Windows.Forms (even for the CCW used by native PowerBuilder). The SnapDevelop IDE that Appeon provides only targets .Net Core and .Net Standard. Windows Form is (not yet) part of .Net Core or .Net Standard. There is a preview of .Net Core 3.0 available that includes it, but for now that means we can't use SnapDevelop. It also means we can't use Visual Studio Code either.
In any event, here's that C# code I had for the PowerBuilder CCW, but in plain C# rather than the modified syntax that PowerBuilder.Net used. If you're using Visual Studio, you just add a reference to the Windows.Forms assembly and use code similar to this:
using System;
using System.Windows.Forms;
using System.Collections.Specialized;
namespace DragAndDropDemo
{
public class DragAndDrop
{
public void DoDragAndDrop(string filename)
{
StringCollection files = new StringCollection();
files.Add(filename);
DataObject dataObject = new DataObject();
dataObject.SetFileDropList ( files ) ;
Control control = new System.Windows.Forms.Control();
control.DoDragDrop(dataObject, System.Windows.Forms.DragDropEffects.Copy);
}
}
}
I did verify it compiles. I didn't go as far as to create it as a CCW or attempt to use it.
In any event, here's that C# code I had for the PowerBuilder CCW, but in plain C# rather than the modified syntax that PowerBuilder.Net used. If you're using Visual Studio, you just add a reference to the Windows.Forms assembly and use code similar to this:
using System;
using System.Windows.Forms;
using System.Collections.Specialized;
namespace DragAndDropDemo
{
public class DragAndDrop
{
public void DoDragAndDrop(string filename)
{
StringCollection files = new StringCollection();
files.Add(filename);
DataObject dataObject = new DataObject();
dataObject.SetFileDropList ( files ) ;
Control control = new System.Windows.Forms.Control();
control.DoDragDrop(dataObject, System.Windows.Forms.DragDropEffects.Copy);
}
}
}
I did verify it compiles. I didn't go as far as to create it as a CCW or attempt to use it.
Please Log in or Create an account to join the conversation.
Rick Domogalik
Posts: 3
Rick Domogalik replied the code: Two Factor Authentication
Bruce,
Thanks for the response. After some checking I have determined that the version of PowerBuilder I subscribe to does not include the C# editor. I can upgrade to the Cloud version and get it, just not sure if that is the correct course to take. I also checked into Visual Studio Code. I am very comfortable coding in PowerBuilder, but Visual studio Code seems like a steep learning curve to get up to speed on for me. In your opinion, would using the C# editor from Appeon be easier for someone who is familiar with PowerBuilder? Just trying to determine the best way to move forward with my project and either get up to speed with Visual Studio or Upgrade to the Cloud account with Appeon and use their C# editor.
Also, would you happen to have any examples of the assemblies to enable the drag/drop functionality with PowerBuilder and Windows Explorer? I tend to learn best looking at an example piece of code.
Thanks for your help!
Rick
Thanks for the response. After some checking I have determined that the version of PowerBuilder I subscribe to does not include the C# editor. I can upgrade to the Cloud version and get it, just not sure if that is the correct course to take. I also checked into Visual Studio Code. I am very comfortable coding in PowerBuilder, but Visual studio Code seems like a steep learning curve to get up to speed on for me. In your opinion, would using the C# editor from Appeon be easier for someone who is familiar with PowerBuilder? Just trying to determine the best way to move forward with my project and either get up to speed with Visual Studio or Upgrade to the Cloud account with Appeon and use their C# editor.
Also, would you happen to have any examples of the assemblies to enable the drag/drop functionality with PowerBuilder and Windows Explorer? I tend to learn best looking at an example piece of code.
Thanks for your help!
Rick
Please Log in or Create an account to join the conversation.