I want to call a C# dll (which would send sms from a windows mobile device)
from a java application(the application is using the IBM weme j9 standard)..
The C# dll was developed from the CSharp source code available at the link:
http://phvu.wordpress.com/2009/01/15/sending-sms-message-in-windows-ce/
Would anybody tell me how to access the dll(smart device dll) from the java application using jni?
I want to know how to write jni class for invoking the C# smart device dll from java?
Here is the C# code:
public class Util
{
private static bool SendMessage_WM2k3(string destination, string message)
{
// SEND = 2, RECEIVE = 1
IntPtr handle;
IntPtr intPtr = IntPtr.Zero;
if (SmsOpen("Microsoft Text SMS Protocol", 2, out handle, ref intPtr) == 0)
{
byte[] array = new byte[0x204];
if (destination.StartsWith("+"))
{
BitConverter.GetBytes(1).CopyTo(array, 0);
}
Encoding.Unicode.GetBytes(destination).CopyTo(array, 4);
int dwProviderSpecificDataSize = 0xa4;
byte[] buffer2 = new byte[dwProviderSpecificDataSize];
BitConverter.GetBytes(1).CopyTo(buffer2, 4); // messageclass = 1
int messageId;
if (SmsSendMessage(handle, null, array, null, message, message.Length * 2, buffer2, dwProviderSpecificDataSize, 0, 0, out messageId) == 0)
{
SmsClose(handle);
return true;
}
}
return false;
}
private static Thread m_SendSMSThread;
private static string m_sRecipientPhone;
private static string m_sSMSContent;
private void SendSMS()
{
bool bSuccess;
if (Environment.OSVersion.Version.Major < 5) // WM 2k3 and previous
{
bSuccess = SendMessage_WM2k3(m_sRecipientPhone, m_sSMSContent);
}
else
{
bSuccess = SendSMSMessage(m_sRecipientPhone, m_sSMSContent, false) == 0;
}
if (bSuccess)
{
MessageBox.Show("SMS message was sent successfully!", "SMS",
MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
}
else
{
MessageBox.Show("Error when sending SMS message", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
}
}
public static void SendSMS(string recipient, string sContent)
{
m_sRecipientPhone = recipient;
m_sSMSContent = sContent;
m_SendSMSThread = new Thread(SendSMS);
m_SendSMSThread.Start();
}
[DllImport("cemapi.dll", EntryPoint = "#48", SetLastError = true)]
private static extern int SendSMSMessage(string RecipientAddress, string MessageText, bool DeliveryReportRequested);
[DllImport("sms.dll")]
private static extern int SmsSendMessage(IntPtr smshHandle, byte[] psmsaSMSCAddress, byte[] psmsaDestinationAddress, byte[] pstValidityPeriod, string pbData, int dwDataSize, byte[] pbProviderSpecificData, int dwProviderSpecificDataSize, int smsdeDataEncoding, int dwOptions, out int psmsmidMessageID);
[DllImport("sms.dll")]
private static extern int SmsOpen(string ptsMessageProtocol, int dwMessageModes, out IntPtr psmshHandle, ref IntPtr phMessageAvailableEvent);
[DllImport("sms.dll")]
private static extern int SmsClose(IntPtr smshHandle);
}
Please reply asap...
Thanks in advance..