namespace ManagerCSharp { public static class ManagedClassTest { public static void ShowValue(ref int value) { DialogResult result = MessageBox.Show("C# Message Box", "C# Message Box", MessageBoxButtons.OKCancel); if (result == DialogResult.OK) value = 1; else value = 2; return; } } } #### public ref class CSharpClass { public: void ShowCSharpMessageBox(int *value) { ManagerCSharp::ManagedClassTest::ShowValue(*value); return; } } __declspec(dllexport) void __stdcall ShowMessageBox2(int *value) { CSharpClass myCSharp; myCSharp.ShowCSharpMessageBox(value); } #### use strict; use Win32::API; Win32::API->Import('ManagedCPP.dll', 'void __stdcall ShowMessageBox2(int *value);'); my $result; ShowMessageBox2(\$result);